9. 유연한설계
·
오브젝트
8장내용과 겹친다. DiscountPolicy를 추상화해서 Moive가 어떤 할인 정책을 사용할지 런타임에 정해주기.확장에는 열려있고 수정에는 닫혀있음 (개방 폐쇄 원칙)public class Movie { private String title; private Duration runningTime; private Money fee; private DiscountPolicy discountPolicy; public Movie(String title, Duration runningTime, Money fee, DiscountPolicy discountPolicy) { this.title = title; this.runningTime = runningTime..
8. 의존성 관리하기
·
오브젝트
의존성이 무엇일까? 금액할인하는 정책을 가진 영화가 있다고하자, 갑자기 영화의 사정이 좋지 않아 할인 정책을 더 추가 해야한다면?그냥 금액할인 정책 클래스를 인자로 받는 영화를 구현했다면, 변경이 힘들것 이다. 할인정책이라는 인터페이스를 만들고 영화가 할인정책 인터페이스를 인자로 받는다면?변경이 쉬울 것이다. 예시로, movie 의 생성자이다. DiscountPolicy를 인자로 받는걸 볼 수 있다. public Movie(String title, Duration runningTime, Money fee, DiscountPolicy discountPolicy) { this.title = title; this.runningTime = runningTime; this.f..
6장 메세지와 인터페이스
·
오브젝트
메세지? 메서드?각 객체간에 협력하여 메서드를 실행하는게 메세지를 전송한다라고 한다.이때, 인터페이스를 사용하여 메서드를 실행하게 되면, 클라이언트는 메서드가 자세히 어떻게 구현되어 있는지 모른다.그래서 메서드 실행보다는, 오퍼레이션 호출이라고 부르는 것.마치 챕터 2장의 코드중에, screen 객체가 movie 객체에게  영화비를 계산하라 라는 메세지를 던지는것과 같다.인터페이스로 구현된거는 movie 객체가 할인금액을 계산하라 라는 메세지를 DiscountPolicy 객체에게 메세지를 던지는것 과 같다. 이때, 컴파일 시점에서는 movie객체가 Discountpolicy 객체의 할인 금액을 계산하라는 메서드에 자세히 어떻게 구현되어 있는지 모르기 때문에, 오퍼레이션이라고 한 것임.   퍼블릭 인터페이..
5장 책임을 할당하기
·
오브젝트
GRASP 패턴으로 설계하기General Responabity Assaignment Software Pattern책임위주로 설계해보자 도메인 설계처음 사용자가 보낼 메세지를 중심으로 도메인을 설계해보자!영화 상영 예매를 기준으로 설계하면 아래와 같다.완벽한 도메인 설계는 없고 대충 객체간의 메세지 전달이 이런식으로 되겠구나~ 하는 틀만 잡는거라 정확할 필요는 없다.     메세지를 기반으로 생각하기책임을 기반으로 변경에 강한 설계를 하려면?첫번째로 도메인 설계를 하고두번째로 메세지를 기반으로 각 객체에게 책임을 할당하는거다.메세지를 어디로 전달 할껀지를 생각할때, 정보 전문가가 누구인지를 생각하라 즉, 예매하라 라는 메세지를 줄건데, 예매 정보전문가는 상영 객체가 좋겠다. 예매하라 -> 상영 클래스 하지..
4장 설계품질과 트레이드 오프
·
오브젝트
데이터 중심의 설계 방법단점깃허브 chapter 4 - step 1 참조 코드가 더러움.할인을 적용하는 구현 방식에서 난잡하다고 느낌할인조건에 대한 책임(행동)의 상태값이 여기저기 흩어져 있는 느낌을 받았다. step 2 도 할인정책의 상태값이 변경된다면, Screen, Movie, Discountcondition 클래스들에 전체적으로 영향을 미치니 캡슐화가 올바르게 되지 않았다고 볼 수 있다. 또한, ReservationAgency 클래스가 직접 할인 요금을 계산하는 로직을 구현하고 있다보니, 할인 요금을 계산하는데, 할인조건, 영화의 정보등.. 많은 상태값과 클래스에 의존하고 있기 때문에, 변경에 매우 취약하다.  책임 중심의 설계행동(책임)중심으로 설계를 하자.꼭 필요한 행동 중심으로 인터페이스나 ..
3장 역할, 책임, 협력
·
오브젝트
책임 주도 설계 2장의 영화 예매 시스템을 생각해보면, screen 객체는 영화를 예매한다는 책임을 가지고 있다.(reserve 라는 메서드를 실행한다) 이때, screen 클래스는 영화를 예매한다는 하는것의 책임을 다하기 위해서는,  영화의 정보와 상영 시간을 알고 있는 아는것의 책임을 다해야한다.  이렇게 하는것의 책임을 다하려면 아는것이 있어야한다. 다른 예시로, 영화비를 계산하려면, screen은 영화비, 영화 할인 정책과 같은 아는것의 책임을 다하지 않는다.movie 클래스가 책임을 다하고 있기 때문에, 영화비를 계산하는것은 movie 클래스로 넘겨주어야 한다.이렇게 책임을 분리하는게 캡슐화이고 책임을 기반으로 객체를 설계 하는 것이 책임 주도 설계이다. 처음 설계할때, 객체에 필드 채워넣고 무..