반응형
* 이 글은 책을 읽고 주관적인 생각과 함께 요약 정리한 글입니다. 설명을 위한 글이 아니므로 내용이 정확하지 않을 수 있습니다.
제목 : 객체지향의 사실과 오해
저자 : 조영호
범위 : 03 타입과 추상화
요약 정리
- 이해하기 쉽고 예측 가능한 수준으로 단순화하는 전략
- 추상화란 불필요한 부분을 도려내가면서 본질(목적)을 드러나게 하는 과정이다.
- 공통점은 취하고 차이점을 버리는 일반화를 통해 단순하게 만든다.
- 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이다.
- 공통적인 특성으로 묶은 것을 '개념'이라고 한다.
- 개념은 세 가지 관점으로 이야기 할 수 있다.
- 심볼 : 개념을 가리키는 명칭(ex. 트럼프카드) -> 명칭
- 내연 : 개념의 완전한 정의(ex. 트럼프카드의 설명, 공통된 특징) -> 행동
- 외연 : 개념에 속하는 객체 집합(ex. 트럼프 카드들) -> 집합
- 어떤 객체가 어떤 개념에 포함된다면 그 객체를 그 개념의 '인스턴스'라고 부른다.
- 개념은 '타입'이다.
- '타입 시스템'의 목적은 데이터가 잘못 사용되지 않도록 제약사항을 부과하는 것이다.
- 객체를 만들 때 가장 중요한 것은 다른 객체와 협력하기 위해 어떤 행동을 해야할지를 결정하는 것이다.
- 동일한 행동을 수행할 수 있다면 그 객체들은 동일한 타입으로 분류할 수 있다.
- 캡슐화 - 객체의 내부적인 표현은 철저하게 감춰진다. (내부 표현이 다르더라도 행동이 같다면 동일한 타입에 속한다)
- 타입을 결정하는 것은 객체의 행동뿐이다.
- 다형성 - 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 것을 말한다.
- 객체가 외부에 제공해야하는 행동(책임)을 먼저 결정하고 데이터를 나중에 결정하는 것을 책임-주도 설계(RDD)라고 부른다.
- 더 포괄적인 개념과 그 하위 개념은 일반화/특수화 관계라고 한다.
- 일반화/특수화 관계를 결정하는 것은 객체의 상태가 아닌 행동이다.
- 특수한 타입이란 자신만의 행동을 추가하는 타입을 가리킨다.
- 내연(행동)과 외연(집합)의 크기는 반비례이다.
- 일반화/특수화는 곧 슈퍼타입/서브타입이다.
- 서브타입은 슈퍼타입을 대체할 수 있다. (상속받으므로)
- 타입의 목적
- 타입은 시간에 따른 객체의 상태 변경이라는 복잡성을 단순화할 수 있는 효과적인 방법이다.
- 동적 모델, 정적 모델
- 객체의 상태가 어떻게 변하고 어떻게 행동하는지를 포착하는 것이 동적 모델이라고 한다.
- 객체의 상태가 아닌 객체가 속한 타입의 정적인 모습을 정적 모델이라고 한다.
- 클래스를 작성하는 시점은 정적인 관점에서 접근하는 것.
- 객체의 상태 변경을 추적하고 디버깅 하는 것은 동적 모델을 다루는 것.
- 동적, 정적 모두 잘 다루어야 한다.
- 객체를 분류하는 기준은 타입이며, 타입을 나누는 기준은 객체의 행동이다.
- 객체의 타입을 구현할 수 있는 방법 중 하나가 클래스이다.
하고 싶은 말
- 추상화란 결국 개발자가 인지할 수 있을 수준으로 단순화 시키기 위해 만들어진 것을 알게되었다.
- 앞으로 객체를 만들 때는 어떤 행동이 필요한지 먼저 생각해보고 만들자.
반응형
'나는 이렇게 본다 > 객체지향의 사실과 오해' 카테고리의 다른 글
도메인과 유스케이스, 유지보수하기 쉽고 유연한 객체지향 시스템 (0) | 2022.04.16 |
---|---|
객체지향의 강력함은 책임을 자율적으로 만드는 것에 달려있다 (0) | 2022.04.04 |
테스트 주도 개발은 객체지향 설계도구 (0) | 2022.04.01 |
행동이 상태를 결정한다. (0) | 2022.02.10 |
일하는 객체들이 서로 협력하는 관계를 구축하는 것 (0) | 2022.02.07 |