시배's Android

객체지향의 사실과 오해 | 3장. 타입과 추상화 본문

Book/객체지향의 사실과 오해

객체지향의 사실과 오해 | 3장. 타입과 추상화

si8ae 2023. 10. 9. 23:03
  • 진정한 의미에서 추상화란 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정이라고 할 수 있다.
  • 추상화의 목적은 불필요한 부분을 무시함으로써 현실에 존재하는 복잡성을 극복하는 것이다.
  • 추상화는 복잡한 현실을 단순화하기 위해 사용하는 인간의 가장 기본적인 인지 수단이라고 할 수 있다.
  • 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.
  • 공통점을 기반으로 객체들을 묶기 위한 그릇을 개념이라고 한다.
  • 개념을 이용하면 객체를 여러 그룹으로 분류할 수 있다.
  • 객체란 특정한 개념을 적용할 수 있는 구체적인 사물을 의미한다. 개념이 객체에 적용됐을 때 객체를 개념의 인스턴스라고 한다.
  • 심볼 : 개념을 가리키는 간략한 이름이나 명칭
  • 내연 : 개념의 완전한 정의를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 확인할 수 있다.
  • 외연 : 개념에 속하는 모든 객체의 집합
  • 분류란 객체에 특정한 개념을 적용하는 작업이다. 객체에 특정한 개념을 적용하기로 결심했을 때 우리는 그 객체를 특정한 집합의 멤버로 분류하고 있는 것이다.
  • 개념은 객체들의 복잡성을 극복하기 위한 추상화 도구다.
  • 공학자들은 개념을 대체할 수 있는 좀 더 세련돼 보이는 용어를 수학으로부터 차용해 왔다. 그것은 바로 타입이다.
  • 타입은 개념과 동일하다. 따라서 타입이란 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 의미한다.
  • 데이터 타입은 메모리 안에 저장된 데이터의 종류를 분류하는 데 사용하는 메모리 집합에 관한 메타데이터다.
  • 객체는 행위에 따라 변할 수 있는 상태를 가지고 있다는 사실을 기억하라.
  • 상태는 행동의 결과로 초래된 부수효과를 쉽게 표한하기 위해 도입한 추상적인 개념일 뿐이다.
  • 객체가 협력을 위해 어떤 책임을 지녀야 하는지를 결정하는 것이 객체지향 설계의 핵심이다.
  • 어떤 객체가 어떤 타입에 속하는지를 결정하는 것은 객체가 수행하는 행동이다.
  • 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다.
  • 동일한 책임을 수행하는 일련의 객체는 동일한 타입에 속한다고 말할 수 있다.
  • 객체의 타입을 결정하는 것은 객체의 행동뿐이다.
  • 다형성이란 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력을 뜻한다.
  • 훌륭한 객체지향 설계는 외부에 행동만을 제공하고 데이터는 행동 뒤로 감춰야 한다. 이를 흔히 캡슐화라고 한다.
  • 타입과 타입 사이에는 일반화/특수화 관계가 존재할 수 있다.
  • 일반화와 특수화는 동시에 일어난다.
  • 객체지향에서 일반화/특수화 관계를 결정하는 것은 객체의 상태를 표현하는 데이터가 아니라 행동이라는 것이다.
  • 좀 더 일반적인 타입을 슈퍼타입이라고 하고 좀 더 특수한 타입을 서브타입이라고 한다.
  • 일반적으로 서브타입은 슈퍼타입의 행위와 호환되기 때문에 서브타입은 슈퍼타입을 대체할 수 있어야 한다.
  • 일반화/특수화 계층은 객체지향 패러다임에서 추상화의 두 번째 차원을 적절하게 활용하는 대표적인 예다.
  • 타입은 추상화다. 타입을 이용하면 객체의 동적인 특성을 추상화할 수 있다.
  • 객체지향에서 중요한 것은 동적으로 변하는 객체의 상태와 상태를 변경하는 행위다. 클래스는 타입을 구현하기 위해 프로그래밍 언어에서 제공하는 구현 메커니즘이다.