[Book]객체 지향의 사실과 오해, 조영호: 3장

Hyunta·2021년 9월 24일
0
post-thumbnail

3. 타입과 추상화

런던 지하철의 지도의 목적을 지형의 정확성이 아니라 노선의 정확성으로 가져온다.

지하철 노선을 목적성에 부합하게 추상화 시켜서 편의성을 가져왔다.


추상화

어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.

복잡성을 다루기 위해 추상화는 두 차원에서 이뤄진다.

  • 첫 번째 차원은 구체적인 사물들 간의 공통점은 취하고 차이점을 버리는 일반화를 통해 단순하게 만드는 것이다.
  • 두 번째 차원은 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만드는 것이다.

모든 경우에서 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이라는 점을 기억하라.


객체지향과 추상화

앨리스의 '기껏해야 트럼프에 불과해' 라는 말을 통해 복잡한 인물을 단순하게 만들었다.

개념을 이용해서 객체를 여러 그룹으로 분류할 수 있다.

객체에 어떤 개념을 적용하는 것이 가능해서 개념 그룹의 일원이 될 때 객체를 그 개념의 인스턴스라고 한다.

하트 여왕은 '트럼프'라는 개념 그룹의 일원이므로 인스턴스라 볼 수 있다.

개념의 세 가지 관점

  • 심볼: 개념을 가리키는 이름이나 명칭
  • 내연: 개념의 완전한 정의를 나타내며 내연의 의미를 이용해 객체가 개념에 속하는지 여부를 확인할 수 있다.
  • 외연: 개념에 속하는 모든 객체의 집합(set)

트럼프의 예시로 본다면

심볼 - 트럼프

내연 - 몸이 납작하고 두 손과 두 발이 네모난 몸 모서리에 달려 있다는 트럼프에 대한 설명

외연 - 정원사, 병사, 신하, 왕자와 공주, 하객

객체를 분류하기 위한 틀

분류란 객체에 특정한 개념을 적용하는 작업이다. 객체에 특정한 개념을 적용하기로 했을 때 우리는 그 객체를 특정한 집합의 멤버로 분류하고 있는 것이다.

어떤 객체를 어떤 개념으로 분류할지가 객체 지향의 품질을 결정한다.

분류는 추상화를 위한 도구 이다.


타입

타입은 개념이다.

  1. 타입은 데이터가 어떻게 사용되느냐에 관한 것이다. 어떤 데이터에 어떤 연산자를 적용할 수 있느냐가 그 데이터의 타입을 결정한다.
  2. 메모리에 어떻게 표현하는지는 외부로부터 철저하게 감춰진다.

객체지향 프로그램을 작성할 때 우리는 객체를 일종의 데이터처럼 사용한다. 새로운 데이터 타입을 선언하는 것과 같다.

객체가 협력을 위해 어떤 책임을 지녀야 하는지를 결정하는 것이 객체지향 설계의 핵심이다.

  1. 객체가 어떤 행동을 하느냐에 따라 객체의 타입이 결정된다.
    • 동일한 행동은 동일한 책임을 의미하고 동일한 메시지 수신을 의미한다.

다형성: 동일한 요청에 대해 다른 방식으로 응답할 수 있는 능력

캡슐화: 외부에 행동만을 제공하고 데이터는 행동 뒤로 감춰야 한다.


타입의 계층

'트럼프'들은 기존 트럼프보다 기능이 더 많다. (걸을 수 있다)

'트럼프' - '트럼프 인간' / 일반화 - 특수화 관계 / 슈퍼타입 - 서브타입

구체화될 수록 외연은 줄어들고 내연은 늘어난다. (조건은 까다로워지고 인스턴스 수가 줄어든다.)


정적 모델

동적으로 변하는 객체의 '상태' 와 상태를 변경하는 ' 행위'.

클래스는 타입을 구현하기 위해 프로그래밍 언어에서 제공하는 구현 메커니즘이다.

profile
세상을 아름답게!

0개의 댓글