본문 바로가기
개인/[java] 스프링 핵심 원리 학습

새로운 구조와 할인 정책 적용 (AppConfig만 수정)

by hyeley5 2023. 9. 9.

정액 할인 정책을 --> 정률% 할인 정책으로 변경한다.

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를 애플리케이션이라는 공연의 기획자로 생각하면 된다.

공연 기획자는 참여자인 구현 객체들을 모두 알아야 한다!

 

댓글