- 책임에 초점을 맞춰서 설계할 때 직면하는 가장 큰 어려움은 어떤 객체에게 어떤 책임을 할당할지를 결정하기가 쉽지 않다는 것이다.
- 책임 할당과정은 일종의 트레이드오프다.
- 동일한 문제를 해결할수 있는 다양한 책임 할당 방법이 존재하며 어떤 방법이 최선인지는 상황과 문맥에 따라 달라진다.
- GRASP 패턴은 책임 할당의 어려움을 해결하기 위한 답을 제시해 줄 것이다.
- GRASP 패턴을 배우면 응집도와 결합도 캡슐화 같은 다양한 기준에 따라 책임을 할당하고 결과를 트레이드오프할 수 있는 기준을 배우게 될것이다.
1. 책임주도설계를 향해
- 데이터보다 행동을 먼저 결정하라
- 협력이라는 문맥 안에서 책임을 결정하라
데이터보다 행동을 먼저 결정하라
- 객체에게 중요한것은 데이터가 아니라 외부에 제공하는 행동이다
- 데이터 → 행동으로 객체의 초점을 변경한다.
- 데이터중심설계와 달리 책임주도설계는 이 객체가 수행해야할 책임은 무엇인가 ?
- 를 결정 한 후에 이 책임을 수행해야하는데 필요한 데이터는 무엇인가 를 결정한다.
- 즉 책임을 먼저 결정하고 데이터를 결정한다.
- 객체의 책임을 어떻게 적절하게 할당하냐는 협력에서 그 실마리를 찾을 수 있다
협력이라는 문맥안에서 책임을 결정하라
- 객체에게 할당된 책임의 품질은 협력에 적합한 정도로 결정된다.
- 객체에 책임된 할당이 협력에 어울리지 않으면 그 책임은 나쁜 것이다
- 메시지를 전송하는 클라이언트의 의도에 적합한 책임을 할당해야 한다.
- 메시지가 클라이언트의 의도를 표현한다
이 클래스가 필요한 것은 알겠는데 클래스는 무엇을 해야하지 ? 가 아닌
메시지를 전송해야하는지 누구에게 전송해야하지 ? 라고 질문해야 한다.
- 객체를 결정하기 전에 객체가 수신할 메시지를 먼저 결정한다는 점 역시 주목.
- 클라이언트는 어떤 객체 메시지를 수신할지 알지 못한다.
- 클라이언트는 단지 임의의 객체가 메시지를 수신할것이라는 사실을 믿고 자신의 의도를 표현한 메시지를 전송할 뿐이다.
- 그리고 메시지를 수신하기로 결정된 객체는 메시지를 처리할 책임 을 할당받게 된다.
- 메시지를 먼저 결정하기 떄문에 송신자는 수신자에 대한 어떠한 가정도 할 수 없다.
- 캡슐화가 깔끔하게 이루어진다.
- 올바른 객체지향 설계는 클라이언트가 전송할 메시지를 결정한 후에야 비로소 객체의 상태를 저장하는데 필요한 내부 데이터에 관해 고민하기 시작한다.
책임 주도 설계
- 시스템이 사용자에게 제공해야하는 기능인 시스템 책임을 파악한다.
- 시스템 책임을 좀더 작은 책임으로 분할한다.
- 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.
- 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다.
- 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 된다.
'book > 오브젝트' 카테고리의 다른 글
5장 - 3. 구현을 통한 검증 (0) | 2021.05.10 |
---|---|
5장 - 2. 책임 할당을 위한 GRASP 패턴 (0) | 2021.05.09 |
4장 설계 품질과 트레이드오프 (0) | 2021.05.05 |
오브젝트 3장 - 역할, 책임, 협력 (0) | 2021.04.30 |
오브젝트 2장 (0) | 2021.04.29 |