2023.08.11 FRI
130p ~ 141p
10일차 내용 ⬇️
2023.08.10 - [개발 서적 기록/오브젝트_조영호] - 10일차 - 진정한 캡슐화는 변경 가능한 모든 것을 내부에 숨긴다
10일차 - 진정한 캡슐화는 변경 가능한 모든 것을 내부에 숨긴다
2023.08.10 THU 117p ~ 130p 9일차 내용 ⬇️ 2023.08.09 - [개발 서적 기록/오브젝트_조영호] - 9일차 - 캡슐화, 응집도 그리고 결합도 9일차 - 캡슐화, 응집도 그리고 결합도 2023.08.09 WED 107p ~ 118p 8일차 내용
magenta-ming.tistory.com
데이터 중심 설계가 변경에 취약한 이유
데이터 중심의 설계는 너무 이른 시기에 데이터에 관해 결정하도록 강요한다.
데이터 중심의 설계에서는 협력에라는 문맥을 고려하지 않고, 객체를 고립시킨 채 오퍼레이션을 결정한다.
그래서 책임 주도 설계로 전환하기 위해서는 두가지의 원칙을 따라야한다.
1. 데이터보다 행동을 먼저 결정하라
2. 협력이라는 문맥 안에서 책임을 결정하라.
책임 주도 설계 원칙 : 데이터 < 행동
데이터 중심 설계는 행동보다는 데이터와 그 데이터의 상태를 우선적으로 고려한다.
데이터는 객체가 책임을 수행하는 데 필요한 재료를 제공할 뿐이다.
그래서 이 데이터를 처리하는데 필요한 오퍼레이션이 무엇인지를 고민하는 단계다.
객체의 행동을 나타내는 책임을 결정한 후에, 객체의 상태를 결정해야한다.
책임 주도 설계 원칙 : 협력과 문맥을 고려한 책임 설계
객체를 결정한 후에 메시지를 선택하지 말고, 메시지를 결정한 후에 객체를 선택해야한다.
메시지가 존재하기 때문에 그 메시지를 처리할 객체가 필요한 것이다.
그래서 메시지는 누구에게 전송해야하는지 고민하는 단계다.
메시지를 수신하게된 객체는 이제 메시지를 처리할 책임을 할당받게 된다.
구체적으로는 "메시지를 전송할 객체는 무엇을 원하는가"를 고려하고, "메시지를 수신할 적합한 객체는 누구인가"를 고민한다.
이때, 객체를 선택할 때에는 책임을 수행할 정보를 알고 있는 객체에게, 책임을 할당해야한다. ( INFORMATION EXPERT 패턴 )
정보와 행동을 가까운 곳에 위치시키면 캡슐화를 유지할 수 있고, 필요한 정보를 가진 객체들로 책임이 분산되어 더 응집력 있고 이해하기 위워진다.
참고로, 책임을 수행하는 객체가 정보를 알고 있어도, 그 정보를 저장할 필요는 없다.
책임 주도 설계의 흐름
1. 시스템 책임 파악 : 시스템이 사용자에게 제공해야하는 기능을 파악한다.
2. 시스템 책임 분할 : 시스템 책임을 더 작은 책임으로 분할한다.
3. 책임 할당 : 분할된 책임을 수행할 수 있는 적절한 객체, 또는 역할을 찾아 책임을 할당한다.
4. 책임 수행에 대한 협력 객체, 역할 부여 : 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우, 이를 책임질 적절한 객체 또는 역할을 찾는다.
5. 협력 관계 부여 : 그 객체 또는 역할에게 책임을 할당해, 두 객체가 협력하게 한다.
GRASP 패턴
General Responsibility Assignment Software Pattern 일반적인 책임 할당을 위한 소프트웨어 패턴
객체에게 책임을 할당할 때, 지켜야할 원칙 패턴으로, 대표적인 책임 할당 기법이다.
'개발 서적 기록 > 오브젝트_조영호' 카테고리의 다른 글
13일차 - 다형성을 고려하자. 메서드를 분해하자. (0) | 2023.08.15 |
---|---|
12일차 - 변경될 가능성이 있는 클래스를 찾아라 (0) | 2023.08.13 |
10일차 - 진정한 캡슐화는 변경 가능한 모든 것을 내부에 숨긴다 (0) | 2023.08.10 |
9일차 - 캡슐화, 응집도 그리고 결합도 (0) | 2023.08.09 |
8일차 - 추상화를 통한 역할 부여 그리고 책임 중심 설계 (0) | 2023.08.09 |