728x90
반응형
- 처음으로 돌아가서 정액 할인 정책을 정률 % 할인 정책으로 변경해보자.
- FixDiscountPolicy -> RateDiscountPolicy
- 어떤 부분만 변경하면 되겠는가?
"AppConfig의 등장으로 애플리케이션이 크게 사용 영역과, 객체를 생성하고 구성(Configuration)하는 영역으로 분리되었다."
"그림 - 사용, 구성의 분리"
구성영역의 OrderServiceImpl -> OrderApp
"그림 - 할인 정책의 변경"
- 'FixDiscountPolicy' -> 'RateDiscountPolicy'로 변경해도 구성 영역만 영향을 받고, 사용 영역은 전혀 영향을 받지 않는다.
"할인 정책 변경 구성 코드"
package hello.core;
import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.discount.RateDiscountPolicy;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
public class AppConfig {
// Ctrl + E -> 과거에 사용한 히스토리 클래스들이 다 나옴
// 생성자 주입
// Ctrl + Alt + M => Extract Method
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
private MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository(); // DBRepository로 바뀔때 여기만 바꾸면 된다.
}
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
public DiscountPolicy discountPolicy() {
// return new FixDiscountPolicy();
return new RateDiscountPolicy(); // RateDiscountPolicy로 바꿀때 여기만 바꾸면 된다.
}
// 메서드를 보면 역할들을 다 알 수 있다.
}
- 'AppConfig'에서 할인 정책 역할을 담당하는 구현을 'FixDiscountPolicy' -> 'RateDiscountPolicy' 객체로 변경했다.
- 이제 할인 정책을 변경해도, 애플리케이션의 구성 역할을 담당하는 AppConfig만 변경하면 된다. 클라이언트 코드인 'OrderServiceImpl'를 포함해서 "사용 영역"의 어떤 코드도 변경할 필요가 없다.
- "구성 영역"은 당연히 변경된다. 구성 역할을 담당하는 AppConfig를 애플리케이션이라는 공연의 기획자로 생각하자. 공연 기획자는 공연 참여자인 구현 객체들을 모두 알아야 한다.
728x90
반응형
'스프링 > 핵심 원리' 카테고리의 다른 글
[Spring] 좋은 객체 지향 설계의 5가지 원칙의 적용 (0) | 2022.01.24 |
---|---|
[Spring] 전체 흐름 정리 (0) | 2022.01.24 |
[Spring] AppConfig 리펙터링 (0) | 2022.01.24 |
[Spring] 관심사의 분리 (0) | 2022.01.24 |
[Spring] 새로운 할인 정책 적용과 문제점 (0) | 2022.01.24 |
댓글