TIL

169일차(모험 78일차) - 스터디

haedal-uni 2022. 3. 1. 23:07
728x90

[add] 새로운 할인 정책 적용과 문제점 [#6] #8

 

할인 정책을 변경하려면 클라이언트인 OrderServiceImpl 코드를 고쳐야 한다.

 

// 고정 할인 정책
//private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); 

// 새로운 할인 정책 적용
private final DiscountPolicy discountPolicy = new RateDiscountPolicy();

 

문제점

- 추상과 구체 둘다 의존 → DIP 위반


- FixDiscountPolicy를 RateDiscountPolicy로 변경하는 순간

OrderServiceImpl의 소스 코드도 함께 변경해야 한다 → OCP 위반

 

 

 

해결하기

인터페이스에만 의존하도록 설계를 변경한다.

//private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); 고정 할인 정책
//private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); 새로운 할인 정책 적용

private DiscountPolicy discountPolicy; // 추상에만 의존

→ DIP 위반 해결

 

 

이렇게 수정을 한 후 이 전에 작성한 OrderServiceTest를 실행하면 에러가 뜬다.

discountPolicy가 아무것도 할당이 되어있지 않아서 null pointer exception이 뜬다.

(구현체가 없어서 코드를 실행할 수 없다.)

 

이 문제를 해결하려면 ?

누군가가 클라이언트인 OrderServiceImpl 에 DiscountPolicy 의 구현 객체를 대신 생성하고 주입해야한다.


728x90