728x90
새로운 구조와 할인 정책 적용
- 처음으로 돌아가서 정액할인 정책을 정률 (%) 할인 정책으로 변경해보자.
- FixDiscountPolicy > RateDiscountPolicy : 어떤 부분만 변경하면 될까?
"AppConfig"의 등장으로 애플리케이션이 크게 사용영역과, 객체를 생성하고 구성(Configuration)하는 영역으로 분리되었다.
따라서 구성영역의 코드만 고치면 됨 !!!
- `FixDiscountPolicy` > `RateDiscountPolicy` 로 변경해도 구성 영역만 영향을 받고, 사용영역은 전혀 영향을 받지 않는다.
package hello.core;
import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.discount.RateDisCountPolicy;
import hello.core.member.MemberRepository;
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 {
public MemberService memberService(){
return new MemberServiceImpl(memberRepository());
}
private MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
public OrderService orderService(){
return new OrderServiceImpl(memberRepository(),discountPolicy());
}
public DiscountPolicy discountPolicy(){
/*FixDiscountPolicy() > RateDisCountPolicy() 만 변경 */
return new RateDisCountPolicy();
}
}
바꿔준 후 테스트 코드 다 돌려보면 정률정책으로 잘 변경되었다는 것을 알 수 있다 !
결과
- `AppConfig`에서 할인 정책 역할을 담당하는 구현을 `FixDiscountPolicy` > `RateDiscountPolicy` 객체로 변경했다.
- 이제 할인 정책을 변경해도, 애플리케이션의 구성역할을 담당하는 AppConfig만 변경하면 된다.
클라이언트 코드인 `OrderServiceImpl`를 포함해서 사용영역의 어떤 코드도 변경할 필요가 없다.
- 구성영역은 당연히 변경된다. 구성역할을 담당하는 AppConfig를 애플리케이션이라는 공연의 기획자로 생각하자.
공연의 기획자는 공연참여자인 구현 객체들을 모두 알아야 한다.
- DIP , OCP 가 지켜졌다.
728x90
'Spring' 카테고리의 다른 글
[ Mybatis ] sqlSession 이용해서 commit 수동만들기 (0) | 2024.01.15 |
---|---|
[Spring] 전체 흐름 정리 (0) | 2023.11.28 |
[Spring] 관심사의 분리, AppConfig (1) | 2023.11.28 |
[Spring] 프로젝트 생성 (1) | 2023.10.30 |
[Spring] 객체지향 설계와 스프링 (37) | 2023.10.30 |