객체 지향 원리 적용 - 새로운 구조와 할인 정책 적용

정액 할인을 정률 할인으로 변경하자

AppConfig의 등장으로 애플리케이션이 크게 사용영역과 , 객체를 생성하고 구성(Configuration)하는 영역으로 분리 되었다.

 

AppCofig

public class AppConfig {

    private MemberRepository memberRepository() {   // 객체 생성을 메소드 처리
        return new MemoryMemberRepository();        // 새로운 구현체를 주입 하고 싶다면 new 객체를 수정하면 된다.
    }

    public DiscountPolicy discountPolicy(){         // 객체 생성을 메소드 처리
        //return new FixDiscountPolicy();             // 새로운 구현체를 주입 하고 싶다면 new 객체를 수정하면 된다.
        return new RateDiscountPolicy();
    }

    public MemberService memberService(){
        return new MemberServiceImpl(memberRepository());
    }

    public OrderService orderService(){
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }
}

 

  • FixDiscountPolicy -> RateDiscountPolicy 객체로 변경했다.
  • 사용 영역의 어떤 코드도 변경할 필요가 없다.

 

정리

  • 새로운 할인 정책 개발 적용 시 DIP 위반 , 이 를 해결하고자 AppConfig 등장
  • 관심사의 분리
    • AppConfig는 애플리케이션의 전체 동작 방식 구성(Config)하기 위해 , "구현 객체를 생성"하고 "연결"하는 책임
    • 이제부터 클라이언트 객체는 자신의 역할을 실행하는 것만 집중 , 권한이 줄어듬(책임이 명확해짐)
  • AppConfig 리팩토링
    • 구성 정보에서 역할과 구현을 명확하게 분리
    • 중복 제거
  • 새로운 구조와 할인 정책 적용
    • AppConfig의 등장으로 애플리케이션이 크게 "사용 영역"과 , 객체를 생성하고 "구성(Configuration)하는 영역" 으로 분리

 

 

스프링 핵심 원리 - 기본편 - 인프런

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 초급 프레임워크 및 라이브러리 웹 개발 서버 개발 Back-End Spring 객체지향 온

www.inflearn.com