1. 할인 정책 변경
👇
👇
😡😡문제점😡😡
역할과 구현을 충실히 분리했음. 다형성도 활용, 인터페이스와 구현 객체를 분리했음.
BUT
# DIP
- 클래스 의존관계를 보면 OrderServiceImpl은 추상(인터페이스)뿐만 아니라 구체(구현)클래스에도 의존하고 있다.
- 추상 : DiscountPolicy
- 구체 : FixDiscountPolicy / RateDiscountPolicy
우리가 설계한 의존 관계
실제 의존 관계
- 클라이언트인 OrderServiceImpl이 인터페이스와 구현체를 함께 의존하고 있다.
- DIP 위반❌❌❌
# OCP
- 기능을 확장하여 변경하려고하면, 클라이언트 코드에 영향을 준다. (FixDiscountPolicy를 RateDiscountPolicy로 수정)
- 할인 정책을 정액할인에서 정률할인으로 변경하려고 하면 OrderServiceImpl의 소스코드 또한 변경해야함.
- OCP위반❌❌❌
⚔해결책⚔
- DIP를 위반하지 않도록 인터페이스에만 의존하도록 의존관계를 변경
- 인터페이스에만 의존하도록 설계와 코드를 변경
- 하지만 구현체가 없는데 어떻게 코드를 실행할까?
- 실제 만들어놓은 주문서비스테스트를 실행시켜보면 오류발생(NullPointerException)
- 인터페이스에 아무것도 안들어가있으니까
이 문제를 해결하기 위해서는 누군가 클라이언트인 OrderServiceImpl에 DiscountPolicy의 구현 객체를 대신 생성하고 주입해주어야함.
구현 객체를 생성하여 의존관계를 주입해주는 과정을 이제 알아보려한다.
반응형
'Spring > Spring Core' 카테고리의 다른 글
AppConfig 리팩토링 / 할인 정책 적용 (0) | 2021.03.05 |
---|---|
관심사의 분리 (0) | 2021.03.04 |
새로운 할인 정책 (0) | 2021.03.04 |
주문과 할인 도메인 실행 / 테스트 (0) | 2021.03.04 |
주문과 할인 도메인 설계 / 개발 (0) | 2021.03.03 |