실제 적용을 하려면 OrderServiceImpl로 들어가야 합니다.
원래는 DiscountPolicy가 FixDiscountPolicy로 되어있었습니다.
FixDiscountPolicy를 RateDiscountPolicy로 바꾸면 끝입니다.
//변경 전
private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
//변경 후
private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
하지만 중요한게 있습니다.
할인 정책을 변경하려면 할인 정책의 클라이언트인 OrderServiceImpl 코드를 고쳐야 합니다.
즉, 여기서 문제점이 발견됩니다.
자세하게 분석해 봅시다.
잘보면 클라이언트인 OrderServiceImpl 이 DiscountPolicy 인터페이스 뿐만 아니라 FixDiscountPolicy 인 구체 클래스도 함께 의존하고 있습니다. 실제 코드를 보면 의존하고 있습니다! DIP 위반
DIP를 위반하고 있기 때문에 어떤 문제가 생길까요?