p. 142 ~ p. 155
동일한 기능을 구현할 수 있는 무수히 많은 설계가 존재한다. 올바른 책임 할당을 위해 INFORMATION EXPERT 패턴 이외에 다른 책임 할당 패턴들을 함께 고려할 필요가 있다.
높은 응집도와 낮은 결합도는 객체에 책임을 할당할 때 항상 고려해야 하는 기본 원리다. 책임을 할당 할 수 있는 다양한 대안이 있다면 응집도와 결합도의 측면에서 더 나은 대안을 선택하는 것이 좋다.
GRASP에서는 이를 LOW COUPLING(낮은 결합도) 패턴과 HIGH COHESION(높은 응집도) 패턴이라고 부른다.
이 패턴들은 설계를 진행하면서 책임과 협력의 품질을 검토하는 데 사용할 수 있는 중요한 평가 기준이다.
협력의 최종 결과물이 어떠한 인스턴스를 생성하는 것이라면, 협력에 참여하는 어떤 객체에 해당 인스턴스를 생성할 책임을 할당해야 한다. GRASP의 CREATER(창조자) 패턴은 이 경우 사용할 수 있는 책임 할당 패턴이다.
이 패턴의 의도는 어떤 방식으로 생성되든 객체와 연결되거나 관련될 필요가 있는 객체에 해당 객체를 생성할 책임을 맡기는 것이다.
생성될 객체에 대해서 알고 있어야 하거나, 관련될 필요가 있는 객체에 해당 객체를 생성할 책임을 맡기는 것이다. 이렇게 두 객체는 서로 결합되고, 이미 결합된 객체에게 생성 책임을 할당하는 것은 설계의 전체적인 결합도에 영향을 미치지 않는다. → 이미 존재하는 객체 사이의 관계를 이용하기 때문에 설계가 낮은 결합도를 유지할 수 있다.
대략적으로 필요한 책임을 객체에 할당하는 것은 설계를 시작하기 위한 대략적인 과정이고 실제 설계는 코드를 작성하면서 이뤄진다.
낮은 응집도가 초래하는 문제를 해결하기 위해서는 변경의 이유에 따라 클래스를 분리해야 한다.
일반적으로 설계를 개선하는 작업은 변경의 이유가 하나 이상인 클래스를 찾는 것으로부터 시작하는 것이 좋다.
코드를 통해 변경의 이유를 파악할 수 있는 방법은 다음과 같다.
메서드의 크기가 너무 커서 긴 코드 라인 속에 문제가 명확하게 보이지 않을 수도 있다. 이 경우 긴 메서드를 응집도 높은 작은 메서드로 분해해 나가는 방법이 있다.