# 05장 책임 할당하기
조영호 저 "오브젝트: 코드로 이해하는 객체지향 설계, 2019"를 읽고 정리한 내용입니다.
데이터 중심의 설계에서 책임 중심으로 초점을 맞춰야 한다.
5.1 책임 주도 설계를 향해
데이터보다 행동을 먼저 결정하라.
요구사항을 이해한다.
협력이라는 문맥 안에서 책임을 결정하라.
요구사항을 해결할 수 있는 패키지 클래스 기능을 결정한다.
아직 객체지향은 아님
책임 주도 설계
만족할때까지 반복적으로 클래스와 객체를 리펙토링 한다. 동작하는 코드로 행동과 책임이 맞는지 확인한다.
협력, 책임, 메세지
5.2 책임 할당을 위한 GRASP 패턴
도메인 개념에서 출발하기
정보전문가에게 책임을 할당하라
메세지를 전송할 객체는 무었을 원하는가.
기능
메세지를 수신할 적합한 객체는 누구인가.
기능과 기능에 필요한 멤버 변수와 객체를 가지고 있는 객체
높은 응집도와 낮은 결합도
응집도 : 하나의 모듈안에 있는 기능들의 연관성
결합도 : 둘 이상의 모듈의 연관성
창조자에게 객체 생성 책임을 할당하라
CREATOR 패턴의 가정이 충족되면 A 는 B 의 private(정보은닉)대상이다.



5.3 구현을 통한 검증
DiscountCondition 개선하기
새로운 할인 조건 추가
순번 조건을 판단하는 로직 변경
기간 조건을 판단하는 로직이 변경되는 경우
타입 분리하기
타입 : 객체를 구분할 수 있는 정보
객체를 식별하고 객체에 맞는 기능을 수행하기 위한 기준
다형성을 통해 분리하기
다형성 : 기능을 정의되지만 세부 구현은 다양하게 할수 있는 성질
if else 를 줄이기 위함
변경으로부터 보호하기
Movie 클래스 개선하기
도메인의 구조가 코드의 구조를 이끈다.
도메인의 이해 = 요구사항의 이해
변경과 유연성
예제는 그럴 듯 하지만 실무는 더 단순해야 한다.
데코레이터 패턴. 프록시 패턴





5.4 책임 주도 설계의 대안
메서드 응집도
리펙토링
객체를 자율적으로 만들자
낮은 결합도와 높은 응집도
무조건 private 로 시작한다.
할인 조건을 계산하는데 필요한 모든 로직이 DiscountCondition 모여 있다.
POLYMORHISM 패턴 (폴리모피즘)
인터페이스를 결정하고 인터페이스를 구현한 객체를 실행한다.
객체의 타입에 따라 변하는 로직을 IF ELSE 없이 구분 실행 가능하다.
PROTECTED VARIATONS 패턴
변경이 될 가능성이 높으면 캡슐화 하라.
private 를 통해 변경의 범위를 한정하자.
코드 가독성 개선
질문 의사소통의 도구로 인터페이스가 필요할까?
사각형 예제
Last updated