🐿️ 3장에서 책임 주도 설계 방법에 대해 좀더 자세히 살펴봄
🗣️ 책임 할당을 위한 GRASP 패턴
1. 도메인 개념에서 출발하기
설계 시작 전에 도메인에 대한 개략적인 모습을 그려보는 것이 좋음
어떤 책임을 할당해야 할때 가장 먼저 고민해야 하는 유력한 후보는 도메인 개념
책임을 할당받을 객체들의 종류와 관계에 대한 유용한 정보를 제공할 수 있다면 충분
설계를 시작하는 것일뿐 도메인 개념들을 완벽하게 정리하는 것은 아님
빠르게 설계와 구현을 진행
도메인 모델: 실용적이면서 유용한 모델이 되게 하기
2. 정보 전문가에게 책임을 할당하라
책임 주도 설계 방식의 첫번째: 애플리케이션이 제공해야 하는 기능을 애플리케이션의 책임으로 생각하기
영화 예매 기능
질문1: 메시지를 전송할 객체는 무엇을 원하는가?
→ 예매하라
메시지 결정 했으므로 메시지에 적합한 객체를 선택해야함
질문2: 메시지를 수신할 적합한 객체는 누구인가?
객체는 상태와 행동을 통합한 캡슐화의 단위이다.
객체는 자신의 상태를 스스로 처리하는 자율적인 존재여야 한다.
객체의 책임과 책임을 수행하는 데 필요한 상태는 동일한 객체 안에 존재해야 한다.
첫번째 원칙: 객체(책임을 수행할 정보를 알고 있는)에게 책임을 할당
→ INFORMATION EXPERT(정보 전문가) 패턴 from GRASP
정보 전문가가 데이터를 반드시 저장하고 있을 필요는 없다.
객체는 해당 정보를 제공할 수 있는 다른 객체를 알고 있거나
필요한 정보를 계산해서 제공할 수도 있기 때문
→메시지 수신할 객체를 상영(Screening)으로 선택했음
Screening은 예매하라는 책임이 할당됨
이제는 외부의 인터페이스가 아닌
Screening 내부로 들어가 메시지를 처리하기 위해 필요한 절차와 구현을 고민하기
개략적인 객체의 책임을 결정하는 단계(너무 세세하게는 X)
Screening이 책임을 수행하는 데 필요한 작업을 구상해보고
스스로 처리할 수 없는 작업이 무엇인지 가릴정도면 됨
만약 스스로 처리할 수 없는 작업이 있다면 외부에 도움 요청해야함
INFORMATION EXPERT 패턴은 객체란 상태와 행동을 함께 가지는 단위라는
객체지향의 가장 기본적인 원리를 책임 할당의 관점에서 표현한다.
INFORMATION EXPERT 패턴을 따름
→ 자율성이 높은 객체들로 구성된 협력 공동체를 구착할 가능성이 높아짐
3. 높은 응집도와 낮은 결합도
설계는 트레이드오프 활동이다.
올바른 책임 할당을 위해 INFORMATION EXPERT 패턴 이외에
다른 책임 할당 패턴들을 함께 고려해야할 필요 있음
높은 응집도와 낮은 결합도는 객체에 책임을 할당할 때 항상 고려해야 하는 기본원리다.
협력 패턴 중에서 높은 응집도와 낮은 결합도를 얻을 수 있는 설계가 있다면 그 설계를 선택해야한다
LOW COUPLING(낮은 결합도) 패턴과 HIGH COHESION(높은 응집도) 패턴 from GRASP
LOW COUPLING(낮은 결합도) 패턴
: 어떻게 하면 의존성을 낮추고 변화에 영향을 줄이며 재사용성을 증가시킬 수 있을까?
→ 설계의 전체적인 결합도가 낮게 유지되도록 책임을 할당하기
도메인 설계를 보며 가까운 객체끼리와 협력하게 한다(→낮은 결합도)
HIGH COHESION(높은 응집도) 패턴
: 어떻게 복잡성을 관리할 수 있는 수준으로 유지할 것인가?
→ 높은 응집도를 유지할 수 있게 책임을 할당하라
책임을 여러 객체가 짊어지게 하면 응집도가 낮아진다(→ 한객체가 바뀔 경우 다른 객체도 변경해야하는 문제가 생김)
책임을 최소한의 객체가 짊어지게 한다.(→ 높은 응집도)
책임을 할당하고 코드를 작성하는 매순간마다
LOW COUPLING, HIGH COHESION의 관점에서 전체적인 설계 품질을 검토하면
단순하면서도 재사용 가능하고 유연한 설계를 얻을 수 있다
4. 창조자에게 객체 생성 책임을 할당하라
CREATOR 패턴: 객체 A를 생성할 책임을 어떤 객체에게 할당할지에 대한 지침을 제공
아래 조건을 최대한 많이 많족하는 B 객체에게 객체 생성 책임을 할당
1. B가 A객체를 포함하거나 참조한다.
2. B가 A객체를 기록한다.
3. B가 A객체를 긴밀하게 사용한다.
4. B가 A객체를 초기화하는 데 필요한 데이터를 가지고 있다(이 경우 B는 A에 대한 정보전문가다)
CREATOR 패턴의 의도: 어떤 방식으로든 생성되는 객체와 연결되거나
관련될 필요가 있는 객체에 해당 객체를 생성할 책임으 맡기는 것
생성될 객체에 대해 잘 알고 있거나 그 객체를 사용해야 하는 객체는
어떤 방식으로든 생성될 객체와 연결될 것임
협력과 책임이 올바르게 동작하는지 확인할 수 있는 방법: 코드 작성 및 실행
영화 예매 시스템을 책임 중심으로 설계하는 과정을 보기
설계 과정은 도메인 안에 존재하는 개념들을 정리하는 것으로 시작
'오브젝트' 카테고리의 다른 글
5. 책임 할당하기 - 5 (0) | 2022.10.14 |
---|---|
5. 책임 할당하기 - 4 (0) | 2022.10.14 |
5. 책임 할당하기 - 2 (0) | 2022.10.14 |
5. 책임 할당하기 - 1 (0) | 2022.10.14 |
4. 설계 품질과 트레이드오프 (0) | 2022.10.14 |
댓글