책임에 초점을 맞춰서 설계할 때 직면하는 가장 큰 어려움은 어떤 객체에게 어떤 책임을 할당할지를 결정하기가 쉽지 않다는 것. 다양한 책임할당방법이 존재. GRASP 패턴이 책임 할당의 어려움을 해결하기 위한 답을 제시해 줄 것이다.
객체에 책임을 할당하는 기본적인 원리를 살펴보자
책임 주도 설계를 향해
- 데이터보다는 행동을 결정
객체에게 중요한 것은 데이터가 아니라 외부에 제공하는 행동, 객체의 책임을 의미함. 데이터는 객체가 책임을 수행하는 데 필요한 재료를 제공할뿐이다.
데이터 중심의 질문 흐름 '이 객체가 포함해야 하는 데이터가 무엇인가' → '이 객체가 수행해야 하는 책임은 무엇인가'
객체 중심의 질문 흐름 '이 객체가 수행해야 하는 책임은 무엇인가' → '이 책임을 수행하는 데 필요한 데이터는 무엇인가'
적절한 객체에게 적절한 책임을 할당하는 능력. 그렇다면 객체에게 어떤 책임을 할당 해야 하는가?
- 협력이라는 문맥 안에서 책임을 결정하라
책임은 객체의 입장이 아니라 객체가 참여하는 협력에 적합해야 한다.
협력은 메시지 전송자로부터 시작되므로, 메시지 전송자에게 적합한 책임을 의미한다. 메시지가 객체를 선택해야 한다.
클라이언트는 어떤 객체가 메시지를 수신할지 알지 못한다. 단지 임의의 객체가 메시지를 수신할 것이라는 사실을 믿고 자신의 의도를 표현할 메시지를 전송할 뿐이다.
(완전 잘짜여진 API를 생각해보면 → 내부를 몰라도 public interface에 접근가능)
GRASP 패턴?
책임 할당에 관한 지식을 서로 공유하고 쉽게 토의
설계를 시작하는 단계에서는 개념들의 의미와 관계가 정확하거나 완벽할 필요가 없다.
정보 전문가에게 책임을 할당→ 해당 정보를 아는 정보 전문가에게 연쇄적으로 책임을 할당함
높은 응집도와 낮은 결합도
LOW COUPLING
HIGH CONHENSION
CREATOR 패턴
- 다음을 만족하는 B에게 책임을 할당
- B가 A객체를 포함하거나 참조한다.
- B가 A객체를 기록한다
- B가 A객체를 긴밀하게 사용한다
- B가 A객체를 초기화하는 데 필요한 데이터를 가지고 있다.( 이 경우 B는 A에 대한 정보 전문가)
도메인 중심이라는 것은 → 데이터와 프로세스가 분리되어 있지 않다는
'공부기록 > 객체지향' 카테고리의 다른 글
Class Adapter vs Object Adapter (0) | 2021.11.10 |
---|---|
오브젝트 6장 - 메시지와 인터페이스 (0) | 2021.10.10 |
오브젝트 4장 - 설계 품질과 트레이드 오프 (0) | 2021.09.15 |
3장 - 역할, 책임, 협력 (0) | 2021.09.14 |
오브젝트 2장 - 객체지향 설계 (0) | 2021.09.13 |