책임 주도 설계
2장의 영화 예매 시스템을 생각해보면, screen 객체는 영화를 예매한다는 책임을 가지고 있다.
(reserve 라는 메서드를 실행한다)
이때, screen 클래스는 영화를 예매한다는 하는것의 책임을 다하기 위해서는, 영화의 정보와 상영 시간을 알고 있는 아는것의 책임을 다해야한다.
이렇게 하는것의 책임을 다하려면 아는것이 있어야한다.
다른 예시로, 영화비를 계산하려면, screen은 영화비, 영화 할인 정책과 같은 아는것의 책임을 다하지 않는다.
movie 클래스가 책임을 다하고 있기 때문에, 영화비를 계산하는것은 movie 클래스로 넘겨주어야 한다.
이렇게 책임을 분리하는게 캡슐화이고 책임을 기반으로 객체를 설계 하는 것이 책임 주도 설계이다.
처음 설계할때, 객체에 필드 채워넣고 무슨 행동을 할지 정하고 다른 객체와 어떻게 협력할지 생각하는 것이 아닌
협력관계를 중심으로 하나의 행위를 하기 위해서 다른 객체에게 무엇을 얻어 올지, 무엇을 제공할지를 먼저 생각하자!
역할
인터페이스를 만들어서 정책을 바꾸는것이 합성이라고 2차시에 배웠는데,
할인 요금을 계산하라는 역할을 수행한다.
2장에서 말한 DiscountPolicy, DiscountCondition 같은 인터페이스나 추상 클래스 들이 역할에 해당한다.
'오브젝트' 카테고리의 다른 글
2장 객체지향 프로그래밍 (1) | 2024.12.13 |
---|