스프링 Spring/스프링 핵심 원리 - 기본편

[스프링 핵심 원리 이해2 - 객체 지향 원리 적용] 새로운 할인 정책 적용과 문제점

코딩개발 2022. 1. 31. 15:41
728x90
반응형

새로운 할인 정책 적용과 문제점

 

할인 정책 변경시 클라이언트인 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

728x90
반응형