새로운 구조와 할인 정책 적용
정액 할인 정책을 정률% 할인 정책으로 변경하기
FixDiscountPolicy ➡️ RateDiscountPolicy
AppConfig의 등장으로 애플리케이션이 크게 사용 영역과,
객체를 생성하고 구성(Configuration)하는 영역으로 분리
사용 영역과 구성 영역(* pdf 그림 보기!)
FixDiscountPolicy ➡️ RateDiscountPolicy 로 변경해도 구성 영역(AppConfig)만 영향을 받고,
사용 영역은 전혀 영향을 받지 않는다
AppConfig가 OrderServiceImpl과 FixDiscountPolicy를 생성했는데
할인 정책의 변경으로 AppConfig가 OrderServiceImpl과 RateDiscountPolicy를 생성한다.
AppConfig
public DiscountPolicy discountPolicy() {
//return new FixDiscountPolicy();
return new RateDiscountPolicy();
}
위 코드와 같이 AppConfig에서 할인 정책 역할을 담당하는 구현을
FixDiscountPolicy ➡️ RateDiscountPolicy 객체로 변경하면 된다.
이제 할인 정책을 변경해도, 애플리케이션의 구성 역할을 담당하는 AppConfig만 변경하면 된다.
클라이언트 코드인 OrderServiceImpl 를 포함해서 사용 영역의 어떤 코드도 변경할 필요가 없다.
맞게 적용이 되는지 확인해본다.
OrderApp
AppConfig에서 아래와 같이 변경한 후에 20,000원일 경우의 할인 금액을 비교해본다.
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
//return new RateDiscountPolicy();
}
OrderServiceImpl
중요한 건 사용영역에 있는 코드는 변경할 필요가 전혀 없다.
추상화에 의존 ➡️ DIP 만족
코드를 바꿨는데도 기존의 클라이언트 코드를 변경한게 없다. ➡️ OCP 만족
DIP와 OCP 모두 만족한다.
구성 영역은 당연히 변경된다.
구성 역할을 담당하는 AppConfig를 애플리케이션이라는 공연의 기획자로 생각한다.
공연 기획자는 공연 참여자인 구현 객체들을 모두 알아야 한다.
전체 흐름 정리 (중간정리)
interface | 구현체(구현 클래스) |
DiscountPolicy | FixDiscountPolicy, RateDiscountPolicy |
MemberRepository | MemoryMemberRepository |
MemberService | MemberServiceImpl |
OrderService | OrderServiceImpl |
클라이언트 코드 OrderServiceImpl, memberServiceImpl
인터페이스와 구체 클래스 함께 의존 ➡️ DIP 위반
자세한 내용은 pdf 참고하기!
- 새로운 할인 정책 개발
- 새로운 할인 정책 적용과 문제점
- 관심사의 분리
- AppConfig 리팩터링
- 새로운 구조와 할인 정책 적용
'TIL' 카테고리의 다른 글
175일차(모험 84일차) - 웹 소켓 구현 공부 (0) | 2022.03.08 |
---|---|
174일차(모험 83일차) (0) | 2022.03.07 |
171일차(모험 80일차) - 스터디 3 (0) | 2022.03.03 |
170일차(모험 79일차) - 스터디 2 (0) | 2022.03.02 |
169일차(모험 78일차) - 스터디 (0) | 2022.03.01 |