정액 할인 정책을 --> 정률% 할인 정책으로 변경한다.
FixDiscountPolicy --> RateDiscountPolicy
AppConfig의 등장으로 애플리케이션이 크게 사용 영역과, 객체를 생성하고 구성(Configuration)하는 영역으로 분리되었다

- FixDiscountPolicy --> RateDiscountPolicy
- AppConfig 코드만 고치면 되기 때문에 사용 영역은 전혀 영향을 받지 않는다!
고치기 전 AppConfig
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
private static MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
변경
public DiscountPolicy discountPolicy() {
// return new FixDiscountPolicy();
return new RateDiscountPolicy();
}
}

OrderApp 실행 결과 바뀐 할인 정책이 잘 적용된 것을 확인해 볼 수 있다.
이제 할인 정책을 변경해도, 애플리케이션의 구성 역할을 담당하는 AppConfig만 변경하면 된다.
클라이언트 코드인 OrderServiceImpl 포함해서 사용 영역의 어떤 코드도 변경할 필요가 없다.
이전에는

이런 식으로 변경을 했었지만, OrderServiceImpl 를 포함해서 사용 영역의 어떤 코드도 변경할 필요가 없어졌다!
구성 영역은 당연히 변경되며, 구성 역할을 담당하는 AppConfig를 애플리케이션이라는 공연의 기획자로 생각하면 된다.
공연 기획자는 참여자인 구현 객체들을 모두 알아야 한다!
'개인 > [java] 스프링 핵심 원리 학습' 카테고리의 다른 글
| IoC, DI, 컨테이너 / 스프링으로 전환하기 (0) | 2023.09.18 |
|---|---|
| 객체 지향 설계의 5가지 중 (SRP, DIP, OCP 적용) (0) | 2023.09.13 |
| AppConfig 리팩터링 (0) | 2023.09.09 |
| 관심사의 분리 (0) | 2023.08.28 |
| 새로운 할인 정책 추가 (객체 지향 원리 적용, 문제점···) (0) | 2023.08.28 |
댓글