객체지향의 사실과 오해
객체지향의 사실과 오해(저자: 조영호)라는 책을 읽고 정리 및 나의 생각을 챕터별로 작성하고자한다.
Chatper 1. 협력하는 객체들의 공동체
- 객체지향의 목표는 새로운 세계를 창조하는 것이다.
- 객체지향의 가장 중요한 개념은 역할, 책임, 협력이다.
- 역할은 책임의 의미를 내포하고 있다.
- 객체는 상태와 행동을 가진다.
- 객체는 객체끼리 협력적이어야하고 자율적인 존재여야한다.
- 객체가 객체에게 요청을 하는 것을 메시지라고한다.
- 객체가 객체의 요청을 처리하는 방법을 메소드라고한다.
- 객체지향의 핵심은 적절한 책임을 수행하는 역할간의 유연하고 견고한 협력관계를 구축하는 것이다.
Chapter 2. 이상한 나라의 객체
객체지향 설계 팁
애플리케이션에 필요한 협력을 생각하고 협력에 참여하는데 필요한 행동을 생각한 후 행동을 수행할 객체를 선택한다.
- 객체란 식별가능한 개체 또는 사물이다. 객체는 구별가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다. 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.
- 상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다. 객체의 상태는 정적 프로퍼티와 동적 프로퍼티로 구성된다. 객체의 프로퍼티는 단순한 값과 다른 객체를 참조하는 링크로 구분할 수 있다.
- 행동은 외부의 요청이나 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다. 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있다. 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야한다.
- 식별자는 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티이다. 값은 식별자를 가지지 않기 때문에 상태를 이용한 동등성 검사를 통해 두 인스턴스를 비교해야한다. 객체는 상태가 변경될 수 있기 때문에 식별자를 이용한 동일성 검사를 통해 두 인스턴스를 비교할 수 있다.
- 명령(Command)란 객체의 상태를 변경하는 작업을 말하고 쿼리(Query)란 객체의 상태를 조회하는 작업을 말한다.
- 행동이 상태를 결정한다.
- 의인화(anthropomorphism)란 현실의 객체보다 더 많은 일을 할 수 있는 소프트웨어 객체의 특징이다.
Chapter 3. 타입과 추상화
- 추상화란 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.
추상화 방법
- 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만든다.
- 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만든다.
- 객체란 특정한 개념을 적용할 수 있는 구체적인 사물이다.
- 개념의 인스턴스란 개념이 적용된 객체이다.
- 타입이란 개념과 동일하며, 우리가 인식하고 있는 다양한 사물이나 객체에 적용할 수 있는 아이디어나 관념을 의미한다.
- 타입은 데이터가 어떻게 사용되냐에 관한 것이다.
- 타입에 속한 데이터는 메모리에 어떻게 표현하는지 외부로부터 철저하게 감춰진다.
- 데이터 타입은 메모리 안에 저장된 데이터의 종류를 분류하는 데 사용하는 메모리 집합에 관한 메타데이터이다.
- 어떤 객체가 어떤 타입에 속할지 결정하는 것은 객체가 수행하는 행동이다.
- 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다.(캡슐화)
- 다형성이란 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력을 뜻한다.
- 일반적인 타입(슈퍼타입)은 특수한 타입(서브타입)에 비해 더 적은 수의 행동을 가지지만 더 큰 외연 집합을 가진다.
- 결국 타입은 추상화이다.
- 동적 모델(dynamic model): 실제로 객체가 살아있는 동안 상태가 어떻게 변하고 행동하는지를 포착하는 것
- 정적 모델(static model): 객체가 가질 수 있는 모든 상태와 모든 행동을 시간에 독립적으로 표현하는 것
- 타입은 객체를 분류하는 기준이며, 타입을 나누는 기준은 객체가 수행하는 행동이다.
- 클래스는 단지 타입을 구현할 수 있는 여러가지 방법 중 하나