반응형
객체지향과 추상화
추상화
- 목적 : 현실의 복잡성 극복하기 위한 방법으로, 복잡한 것을 이해하기 쉬운 수준으로 단순화하는 것
- 방법1 : 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만듦
- 방법2 : 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만듦
개념
- 개념 : 일반적으로 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념
⇒ 객체를 여러 그룹으로 분류 가능 & 각 객체는 특정한 개념을 표현하는 그룹의 일원으로 포함됨 (인스턴스(instance)) - 개념이 객체에 적용됐을 때 객체를 개념의 인스턴스(instance)라고 함
- 개념의 세 가지 관점
- 심볼(symbol): 개념을 가리키는 간략한 이름이나 명칭
- 내연(intension): 개념의 완전한 정의. 객체가 개념에 속하는지 여부를 판단하기 위한 조건
- 외연(extension): 개념에 속하는 모든 객체의 집합(set)
타입
- 타입 : 공통점을 기반으로 객체들을 묶기 위한 틀로, 데이터가 어떻게 사용되느냐에 관한 것
- 데이터가 어떤 타입에 속하는지 결정하는 것은 데이터에 적용할 수 있는 연산자(operator)
- 개발자는 데이터 타입의 표현 방식을 몰라도 데이터를 사용하는 데 지장이 없음.
(데이터 타입에 적용할 수 있는 연산자만 알고 있으면 됨)
객체와 타입
- 객체 ≠ 데이터
- 객체가 수행하는 행동이 객체의 타입 결정
- 객체의 내부 표현 방식이 다르더라도, 어떤 객체들이 동일한 행동을 수행할 수 있다면 그 객체들은 동일한 타입에 속함
- 어떤 객체가 다른 객체와 동일한 데이터를 가지고 있더라도 다른 행동을 한다면 그 객체들은 서로 다른 타입에 속함
- 같은 타입에 속한 객체는 행동만 동일하다면 서로 다른 데이터를 가질 수 있음
(동일한 행동 = 동일한 책임 = 동일한 메시지 수신) (메시지 처리 방법은 다름 ⇒ 다형성)
행동이 우선이다
- 다형성
: 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력
(다형적인 객체들은 동일한 메시지를 수신할 수 있어야 하므로 같은 타입에 속하게 됨) - 캡슐화
외부에 행동만 제공하고 데이터는 행동 뒤로 감춤 - 행동에 따라 객체를 분류하는 방법
- 객체가 외부에 제공해야 하는 책임 결정
- 책임을 수행하는 데 적합한 데이터는 결정
- 책임을 수행하는 데 필요한 외부 인터페이스 뒤로 데이터 캡슐화
타입의 계층
일반화 / 특수화 관계
- 일반화와 특수화는 동시에 발생
- 객체지향에서 일반화 / 특수화 관계를 결정하는 것은 객체가 외부에 제공하는 행동
(객체의 상태를 표현하는 데이터가 결정하는 것 아님) - 서브타입은 슈퍼타입을 대체할 수 있어야 함
(∵ 서브타입은 슈퍼타입의 행위와 호환됨) - 일반화는 추상화를 위한 도구다
슈퍼타입 (일반적인 타입) |
⊃ | 서브타입 (특수한 타입) |
특수한 타입이 가진 모든 행동들 중에서 일부 행동만을 가지는 타입 |
일반적인 타입이 가진 모든 타입 + 자신만의 행동을 추가하는 타입 |
|
행동의 수 적음 | 행동의 수 많음 |
정적 모델
타입은 추상화다
- 타입을 사용하는 이유 : 동적으로 변하는 객체의 복잡성을 극복하기 위해 사용
- 객체의 모든 상태를 나열하는 대신 객체의 상태가 변할 수 있다고 단순화 (객체의 동적인 특성 추상화)
- 동적으로 변하는 객체의 상태를 시간과 무관한 정적인 관점에서 묘사함으로써 객체의 복잡성 극복
동적 모델과 정적 모델
- 동적 모델 (dynamic model) = 스냅샷 (snapshot) = 객체 다이어그램 (object diagram)
: 객체가 살아 움직이는 동안 상태가 어떻게 변하고 어떻게 행동하는지를 포착하는 것 (객체 관점) - 정적 모델 (static model) = 타입 모델 (type mode)
: 객체가 가질 수 있는 모든 상태와 모든 행동을 시간에 독립적으로 표현하는 것 (객체를 추상화한 타입 관점) - 객체지향 어플리케이션을 설계하고 구현하기 위해서는 동적 모델과 정적 모델을 적절히 혼용해야 함
- 클래스 작성 시점에는 시스템을 정적인 관점에서 접근
- 애플리케이션을 실행해 객체의 상태 변경을 추적하고 디버깅하는 동안에는 객체의 동적인 모델을 탐험
클래스
- 클래스 ≠ 타입
- 클래스 : 단지 타입을 구현할 수 있는 여러 구현 메커니즘 중 하나일 뿐
- 타입 : 객체를 분류하기 위해 사용하는 개념 (타입을 나누는 기준은 객체가 수행하는 행동)
- 클래스와 타입의 구분 ⇒ 설계의 유연성 ↑
반응형
'개발 도서 > 객체지향의 사실과 오해' 카테고리의 다른 글
[객체지향의 사실과 오해] 06장 : 객체 지도 (0) | 2023.03.31 |
---|---|
[객체지향의 사실과 오해] 05장 : 책임과 메시지 (0) | 2023.03.13 |
[객체지향의 사실과 오해] 04장 : 역할, 책임, 협력 (1) | 2023.03.13 |
[객체지향의 사실과 오해] 02장 : 이상한 나라의 객체 (0) | 2023.03.13 |
[객체지향의 사실과 오해] 01장 : 협력하는 객체들의 공동체 (0) | 2023.03.13 |