04. 역할, 책임, 협력
- [협력]
- 객체지향의 세계는 동일한 목적을 달성하기 위해 협력하는 객체들의 공동체
- 요청과 응답은 협력에 참여하는 객체가 수행할 책임을 정의한다.
- [책임]
- 어떤 요청에 대해 대답해주기, 적절한 행동의 의무가 있다면 "책임"을 가진다는 것
- 책임 = 무엇을 알고 있는가 + 무엇을 할 수 있는가
- 설계 초반에는 어떤 객체가 어떤 책임을 가지고, 어떤 방식으로 서로 협력해야 하는지 개요만 해도 충분하다!
- [역할]
- 역할은 협력 내에서 다른 객체로 대체할 수 있음을 나타내는 표식
- 역할을 대체할 수 있는 객체는 동일한 메시지를 이해할 수 있는 객체!
- 재사용성 UP!
- 객체지향의 핵심은 클래스를 어찌 구현하는 가 X, 객체가 협력 안에서 어떤 책임과 역할을 수행할 것인지 O
- 결과적으로 클래스와 데이터는 협력과 책임의 집합이 결정된 후에야 무대 위에 등장할 수 있다!
- But, 충분히 자율적인 동시에 충분히 협력적인 객체를 창조해야 한다!
05. 책임과 메시지
- 객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준 역시 자율적이어야 한다!
- [메시지]
- 메시지 = 메시지 이름 + 인자
- 송신자는 메시지 전송을 통해서만 다른 객체의 책임을 요청함
- 수신자는 메시지 수신을 통해서만 자신의 책임을 수행함
- 객체지향 패러다임으로의 전환은 시스템을 정적인 클래스들의 집합이 아니라, 메시지를 주고받는 동적인 객체들의 집합으로 바라보는 것에서 시작한다.
- 협력 관계 속에서 다른 객체에게 무엇을 제공하고, 무엇을 얻어야 하는가라는 관점에서 접근해야 훌륭한 책임을 수확할 수 있다.
- [메서드]
- 메시지를 처리하기 위해 내부적으로 선택하는 방법
- [다형성]
- 서로 다른 타입에 속하는 객체들이 동일한 메시지를 수신할 경우, 서로 다른 메서드를 통해 메시지 처리
- [인터페이스]
- 객체의 인터페이스는 객체가 수신할 수 있는 메시지의 목록으로 채워진다.
- 인터페이스는 객체가 다른 객체와 협력하기 위한 접점이다.
- [책임의 자율성 == 협력의 품질]
1. 자율적인 책임은 협력을 단순하게 만든다.
2. 자율적인 책임은 모자 장수의 외부와 내부를 명확히 분리한다.
3. 책임이 자율적일 경우, 책임을 수행하는 내부적인 방법을 변경하더라도 외부에 영향 X
- 객체 간 결합도가 낮아진다!
4. 자율적인 책임은 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공한다.