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
'TIL' 카테고리의 다른 글
171일차(모험 80일차) - 스터디 3 (0) | 2022.03.03 |
---|---|
170일차(모험 79일차) - 스터디 2 (0) | 2022.03.02 |
168일차(모험 77일차) - 프로젝트(페이징 문제 해결😂) (0) | 2022.02.28 |
165일차(모험 74일차) - 복습 (0) | 2022.02.25 |
164일차(모험 73일차) - 프로젝트 (0) | 2022.02.24 |