GitBook
객체지향의 사실과 오해

3장 객체지향의 추상화 그리고 타입

현상은 복잡하다, 법칙은 단순하다, 버릴 게 무엇인지 알아내라

#책

#객체지향

#객체지향의사실과오해

2022년 05월 02일

객체지향의 사실과 오해를 읽고 개인적으로 정리한 내용입니다

현상은 복잡하다, 법칙은 단순하다, 버릴 게 무엇인지 알아내라 - 리처드 파인만

이번 정리에서는 추상화의 개념과 추상화의 일종인 타입에 대해서 알아본다

추상화 (Abstract)


사람들은 복잡성의 총체인 현실을 본능적으로 이해하기 쉽고
예측 가능한 수준으로 현실을 분해하고 단순화하는 전략을 사용한다
따라서 추상화란 현실에서 출발하지만 어떤 양상, 세부사항, 구조를 좀 더 명확하게 이해하기 위해
특정 절차나 물체를 의도적으로 무시하거나 감춤으로 복잡도를 극복하는 방법이다

추상화 적용 단계

추상화는 다음 단계를 거치면서 복잡성을 보다 이해하기 쉬운 수준으로 단순화하는 것이 목표다
하지만 어떤 추상화도 의도된 목적으로 사용되지 않을 경우 오도될 수 있다

일반화

구체적인 사물 간의 공통점은 취하고 차이점은 버린다

단순화

중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거한다

타입 ( Type )


별개의 객체지만 공통점을 기반으로 객체를 분류 위한 그릇을 타입이라 한다
이것은 추상화의 일환으로 개별 객체 간의 차이점을 무시하고 공통점을 취해
객체 간의 복잡성을 극복하기 위한 시각이다

타입의 3가지 구성요소

타입은 3가지 개념 구성요소를 통해 객체를 분류할 수 있다

  • 심볼 (Stmbol)
    • 타입을 가리키는 이름이다
  • 내연 (Intension)
    • 타입을 객체에 적용할 수 있는지 여부를 판단하기 위한 조건
      • 특정 객체의 정의
  • 외연 (Extension)
    • 인스턴스들이 모여 이뤄진 집합

인스턴스

객체에 어떤 타입을 적용하는 것이 가능해서 타입의 일원이 될 때 그 객체를 그 타입의 인스턴스라 칭한다

타입 분류

객체에 특정 타입을 적용하는 작업이다

객체를 분류하는 기준은 행동이다

객체의 내부 표현 방식이 다르더라도 객체들이 동일하게 행동한다면 동일한 타입에 속한다고 말할 수 있다
객체가 어떤 데이터를 가졌는지는 우리의 관심사가 아니다

  • [ 다형성 ]행동만 동일하다면 서로 다른 데이터를 가질 수 있다
    • 동일한 행동이란 동일한 책임을 의미하며 동일한 책임은 동일한 메시지 수신을 의미한다
  • [ 캡슐화 ] 외부에 행동만을 제공하고 데이터는 뒤로 감춰야 한다
    • 객체를 행동에 따라 분류하기 위해 지켜야 하는 기본적인 원칙

슈퍼 타입 / 서브 타입

슈퍼 타입이란 서브 타입이 가진 모든 행동 중 일부 행동만을 가지는 타입을 가리킨다
서브 타입이란 슈퍼 타입이 가진 모든 행동을 포함하지만 거기에 자신만의 행동을 추가한 타입을 가리킨다
즉 어떤 타입이 다른 타입의 서브 타입이 되기 위해서는 행위적 호환성을 만족 시켜야 한다

서브 타입은 슈퍼 타입을 대체할 수 있어야 한다

객체지향에서 타입이 나오기까지


우리는 객체지향의 관점을 가지고 추상화를 통해 구체적이고 실제적인 수많은 객체를 만들어낸다
하지만 이 수많은 객체를 개별적인 단위로 취급하기엔 인간의 인지능력은 턱없이 부족하다
그렇기에 사람들은 공통적인 특성을 기준으로 객체를 여러 그룹으로 묶어 동시에 다뤄야 하는 가짓수를 줄이고자 했다
그것이 타입이다

결국 객체지향에서 가장 중요한 것은 행동이다


객체에서 가장 중요한 것은 행동이다, 상태는 행동의 결과를 쉽게 표현하기 위한 추상적인 개념이다
객체를 타입으로 분류하기 위해서는 결국 내부적으로 관리하는 데이터가 아닌 외부에 제공하는 행동을 먼저 생각해야 한다
객체의 행동을 염두에 두며 객체를 적절한 체계를 통해 분류할 경우 애플리케이션을 다루는 개발자의 머릿속에 객체를 쉽게 찾고 조작할 수 있는 정신적인 지도를 제공한다
따라서 객체를 적절한 장소에 보관할 수 있도록 인지능력을 발휘해 최대한 직관적으로 분류해야 한다