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

Jiwoo Kim·2021년 1월 27일
0
post-thumbnail

3장 | 타입과 추상화

🔥 객체를 분류하는 기준은 타입이다.
🔥 타입을 나누는 기준은 객체가 수행하는 행동이다.
🔥 타입을 구현할 수 있는 방법 중 하나는 클래스다.


💻 추상화를 통한 복잡성 극복

추상화

  • 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이 목적
  • 어떤 양상, 세부사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법
  • 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것
  • 중요한 부분을 강조하기 위해 불필요한 세부사항을 제거함으로써 단순하게 만드는 것

💻 객체지향과 추상화

  • 개념(concept): 공통점을 기반으로 객체들을 묶기 위한 관념이나 아이디어
  • 분류(classification): 개념을 이용해서 객체를 여러 그룹으로 나누는 것
  • 인스턴스(instance): 어떤 개념을 적용하는 것이 가능해서 개념 그룹의 일원이 될 수 있는 객체
  • 객체: 특정한 개념을 적용할 수 있는 구체적인 사물로, 개념이 객체에 적용됐을 때 객체를 개념의 인스턴스라고 함

개념의 세 가지 관점

  1. 심볼(symbol): 개념을 가리키는 간략한 이름이나 명칭
  2. 내연(intension): 개념의 완전한 정의를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 알 수 있음
  3. 외연(extension): 개념에 속하는 모든 객체의 집합

객체를 분류하기 위한 틀

  • 어떤 객체를 어떤 개념으로 분류할지가 객체지향의 품질을 결정한다.
  • 객체를 적절한 개념에 따라 분류한 어플리케이션은 유지보수가 용이하고 변경에 용이하게 대처할 수 있다.

💻 타입

타입은 개념이다

  • 타입은 공통점을 기반으로 객체들을 묶기 위한 틀로, 개념과 동일하다.

데이터 타입

  • 데이터 타입은 메모리 안에 저장된 데이터의 종류를 분류하는 데 사용되는 메모리 집합에 관한 메타데이터다.
  • 데이터에 대한 분류는 암시적으로 어떤 종류의 연산이 해당 데이터에 대해 수행될 수 있는지를 결정한다.

객체와 타입

  • 객체를 타입에 따라 분류하고 그 타입에 이름을 붙이는 것은 결국 프로그램에서 사용할 새로운 데이터 타입을 선언하는 것과 같다.

행동이 우선이다

  • 객체가 어떤 행동을 하느냐에 따라 객체의 타입이 결정된다.
  • 객체의 타입은 객체의 내부 표현과는 아무런 상관이 없다.
  • 즉, 객체의 내부 표현 방식이 다르더라도 어떤 객체들이 동일하게 행동한다면 동일한 타입에 속한다.

책임-주도 설계(Responsiblity-Driven Design): 객체가 외부에 제공해야 하는 책임을 먼저 결정하고, 그 책임을 수행하는 데 적합한 데이터를 나중에 결정한 후, 데이터를 책임을 수행하는 데 필요한 외부 인터페이스 뒤로 캡슐화해야 한다.


💻 타입의 계층

일반화/특수화 관계

  • 한 타입이 다른 타입보다 더 특수하게 행동해야 하고, 반대로 한 타입은 다른 타입보다 더 일반적으로 행동해야 한다.
  • 일반적인 타입이란, 특수한 타입이 가진 모든 행동들 중에서 일부 행동만을 가지는 타입이다.
  • 특수한 타입이란, 일반적인 타입이 가진 모든 행동을 포함하지만 거기에 더해 자신만의 행동을 추가하는 타입이다.

슈퍼타입/서브타입

  • 슈퍼타입(Supertype): 일반적인 타입
  • 서브타입(Subtype): 더 특수한 타입

💻 정적 모델

타입의 목적

  • 타입은 시간에 따라 동적으로 변하는 객체를 정적인 모습으로 다룰 수 있게 해준다.

결국 타입은 추상화다

  • 객체의 동적을 특성을 타입을 통해 추상화할 수 있다.
  • 타입은 시간에 따른 객체의 상태 변경이라는 복잡성을 단순화할 수 있는 효과적인 방법이다.

동적 모델과 정적 모델

  • 동적 모델(dynamic model): 객체가 특정 시점에 구체적으로 어떤 상태를 가지는지 포착
  • 정적 모델(static model): 객체가 속한 타입의 정적인 모습 표현
  • 객체 관점의 동적 모델과 타입 관점의 정적 모델을 적절히 혼용해야 한다.

클래스

  • 정적 모델, 즉 타입은 클래스를 이용해서 구현한다.
  • 클래스와 타입은 동일한 개념이 아니다.

📝 느낀점

타입과 클래스는 같은 개념이라고 무의식적으로 생각하고 있었는데, 이번 장을 읽으면서 잘못된 생각을 깰 수 있었다. 클래스는 타입의 구현체일 뿐이고, 타입은 행동을 중심으로 생각해야 한다는 것을 배울 수 있었다.

0개의 댓글