[스프링 핵심 원리 이해2 - 객체 지향 원리 적용] 새로운 할인 정책 적용과 문제점
새로운 할인 정책 적용과 문제점
할인 정책 변경시 클라이언트인 OrderServiceImpl 변경 필요
// private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
역할과 구현 분리 OK
다형성 활용, 인터페이스와 구현 객체 분리 OK
OCP, DIP 객체지향 설계 원칙 준수...한 것 처럼 보이나 사실은 아니다.
- OCP (개방-폐쇄 원칙) : 확장에 열려있으나 변경에는 닫혀있어야 한다. 즉, 변경하지 않고 확장 가능
- DIP (의존관계 역전 원칙) : 역할에 의존. 즉, 인터페이스에 의존
(참고 : https://developer-khm.tistory.com/132)
OrderServiceImpl은 인터페이스 뿐만 아니라 구체(구현) 클래스에도 의존하여 기능을 확장해서 변경시,
클라이언트 코드에 영향을 준다. 즉, OCP를 위반한다.
- 추상(인터페이스) 의존 : DiscountPolicy
- 구체(구현) 클래스 : FixDiscountPolicy, RateDiscountPolicy
DIP를 위반하지 않도록 인터페이스에만 의존하도록 의존관계를 변경 해야한다.
// private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
// private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
private DiscountPolicy discountPolicy;
위 코드를 실행하면 NPE(null pointer exception) 발생
누군가가 클라이언트인 OrderServiceImpl에 DiscountPolicy의 구현 객체를 대신 생성하고 주입해주어야 한다.
인프런 강의 "스프링 핵심 원리 - 기본편"을 정리한 것 입니다.
스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com