[4. 회원 도메인 개발 ~ (순수 자바코드로)]
Note
- 인터페이스의 구현체가 1개인 경우 관례 상 구현체의 이름을 인터페이스이름 + impl이라고 명명합니다.
- 순수 자바코드 할인 정책을 변경할 때 문제점 발생
/* in OrderServiceImpl class */ public class OrderServiceImpl implements OrderService{ //private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); }
- OrderSerivceImpl이 DiscountPolicy 인터페이스에 의존하며 DIP를 지킨 것 같지만 Fix, RateDiscountPolicy와 같은 구체화된 구현 클래스에도 의존하고 있음. (DIP위반)
- 또한 고정 할인 정책에서 동적 할인 정책으로 바꿀 시 위와 같이 코드를 변경해야하는데 이는 OCP위반
어떻게 해결 ?
→ 인터페이스에만 의존하도록 설계를 변경
→ 애플리케이션의 전체 동작 방식을 구성하기 위해서 구현객체를 생성하고 연결하는 책임을 가지는 별도의 설정 클래스를 생성 (App Config)
- App Config는 애플리케이션의 실제동작에 필요한 구현객체를 생성, 객체 인스턴스의 참조를 "생성자를 통해서 주입"