새로운 구조와 할인 정책 적용
- FixDiscountPolicy → RateDiscountPolicy
AppConfig
로 애플리케이션이 크게 사용 영역과, 객체를 생성하고 구성하는 영역으로 관리되고 있다.
- FixDiscountPolicy → RateDiscountPolicy 로 변경하면 된다.
public class AppConfig {
public MemberService memberService(){
return new MemberServiceImp(memberRepository());
}
private MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public OrderService orderService(){
return new OrderServiceImp(memberRepository(), discountPolicy());
}
public DiscountPolicy discountPolicy(){
return new RateDiscountPolicy();
}
}
AppConfig
에서 할인 정책 역할을 담당하는 구현을 FixDiscountPolicy
→ RateDiscountPolicy
객체로 변경했다.
- 할인 정책을 변경해요, 애플리케이션의 구성 역할을 담당하는
AppConfig
만 변경하면 된다.
- 클라이언트 코드를 포함한 사용 영역의 어떤 코드도 변경할 필요가 없다.
- 구성 영역은 당연히 변경된다.
- 구성 역할을 담당하는
AppConfig
를 공연의 기획자로 생각하면 공연 기획자는 공연 참여자인 구현 객체를 모두 알아야 한다.
- 클라이언트 코드를 보면 DIP 뿐만 아니라 OCP에 만족한다.
- OCP : 확장에 열려있고, 변경에 닫혀 있다.
FixDiscountPolicy
→ RateDiscountPolicy
할 때, 클라리언트 코드를 변경할 필요가 없다.