# 05장 책임 할당하기

조영호 저 "오브젝트: 코드로 이해하는 객체지향 설계, 2019"를 읽고 정리한 내용입니다.

데이터 중심의 설계에서 책임 중심으로 초점을 맞춰야 한다.

5.1 책임 주도 설계를 향해

  • 데이터보다 행동을 먼저 결정하라.

    • 요구사항을 이해한다.

  • 협력이라는 문맥 안에서 책임을 결정하라.

    • 요구사항을 해결할 수 있는 패키지 클래스 기능을 결정한다.

    • 아직 객체지향은 아님

  • 책임 주도 설계

    • 만족할때까지 반복적으로 클래스와 객체를 리펙토링 한다. 동작하는 코드로 행동과 책임이 맞는지 확인한다.

  • 협력, 책임, 메세지

5.2 책임 할당을 위한 GRASP 패턴

  • 도메인 개념에서 출발하기

  • 정보전문가에게 책임을 할당하라

    • 메세지를 전송할 객체는 무었을 원하는가.

      • 기능

    • 메세지를 수신할 적합한 객체는 누구인가.

      • 기능과 기능에 필요한 멤버 변수와 객체를 가지고 있는 객체

  • 높은 응집도와 낮은 결합도

    • 응집도 : 하나의 모듈안에 있는 기능들의 연관성

    • 결합도 : 둘 이상의 모듈의 연관성

  • 창조자에게 객체 생성 책임을 할당하라

    • CREATOR 패턴의 가정이 충족되면 A 는 B 의 private(정보은닉)대상이다.

137p
145p

5.3 구현을 통한 검증

  • DiscountCondition 개선하기

    • 새로운 할인 조건 추가

    • 순번 조건을 판단하는 로직 변경

    • 기간 조건을 판단하는 로직이 변경되는 경우

  • 타입 분리하기

    • 타입 : 객체를 구분할 수 있는 정보

    • 객체를 식별하고 객체에 맞는 기능을 수행하기 위한 기준

  • 다형성을 통해 분리하기

    • 다형성 : 기능을 정의되지만 세부 구현은 다양하게 할수 있는 성질

    • if else 를 줄이기 위함

  • 변경으로부터 보호하기

  • Movie 클래스 개선하기

    • 도메인의 구조가 코드의 구조를 이끈다.

      • 도메인의 이해 = 요구사항의 이해

  • 변경과 유연성

    • 예제는 그럴 듯 하지만 실무는 더 단순해야 한다.

    • 데코레이터 패턴. 프록시 패턴

156p
158p
164p

5.4 책임 주도 설계의 대안

  • 메서드 응집도

    • 리펙토링

  • 객체를 자율적으로 만들자

    • 낮은 결합도와 높은 응집도

    • 무조건 private 로 시작한다.

    • 할인 조건을 계산하는데 필요한 모든 로직이 DiscountCondition 모여 있다.

  • POLYMORHISM 패턴 (폴리모피즘)

    • 인터페이스를 결정하고 인터페이스를 구현한 객체를 실행한다.

    • 객체의 타입에 따라 변하는 로직을 IF ELSE 없이 구분 실행 가능하다.

  • PROTECTED VARIATONS 패턴

    • 변경이 될 가능성이 높으면 캡슐화 하라.

    • private 를 통해 변경의 범위를 한정하자.

  • 코드 가독성 개선

  • 질문 의사소통의 도구로 인터페이스가 필요할까?

사각형 예제

Last updated