스프링으로 전환하기 지금까지 순수한 자바 코드만으로 DI를 적용했다. 이제 스프링을 사용한다. AppConfig 스프링 기반으로 변경 package inflearn.spring_core.config; import inflearn.spring_core.discount.DiscountPolicy; import inflearn.spring_core.discount.RateDiscountPolicy; import inflearn.spring_core.member.MemberRepository; import inflearn.spring_core.member.MemberService; import inflearn.spring_core.member.MemberServiceImpl; import inflearn.spr..
새로운 구조와 할인 정책 적용 정액 할인 정책을 정률% 할인 정책으로 변경해보자. FixDiscountPolicy => RateDiscountPolicy AppConfig의 등장으로 애플리케이션이 크게 사용 영역과, 객체를 생성하고 구성(Configuration)하는 영역으로 분리되었다. 그림 - 사용, 구성의 분리 그림 - 할인 정책의 변경 변경한 코드 // 애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 별도의 설정 클래스 public class AppConfig { //역할들을 드러나게 바꾼다! // ctrl alt M public MemberService memberService() { return new MemberServiceImpl..
AppConfig 리팩터링 현재 AppConfig를 보면 중복이 있고, 역할에 따른 구현이 잘 보이지 않는다. 기대하는 그림 AppConfig 리펙토링 // 애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 별도의 설정 클래스 public class AppConfig { //역할들을 드러나게 바꾼다! // ctrl alt M public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discou..
상황 가정 애플리케이션을 하나의 공연이라 생각해보자. 각각의 인터페이스를 배역(배우 역할)이라 생각하자. 그런데! 실제 배역 맞는 배우를 선택하는 것은 누가 하는가? 로미오와 줄리엣 공연을 하면 로미오 역할을 누가 할지 줄리엣 역할을 누가 할지는 배우들이 정하는게 아니다. 이전 코드는 마치 로미오 역할(인터페이스)을 하는 레오나르도 디카프리오(구현체, 배우)가 줄리엣 역할(인터페이스)을 하는 여자 주인공(구현체, 배우)을 직접 초빙하는 것과 같다. 디카프리오는 공연도 해야하고 동시에 여자 주인공도 공연에 직접 초빙해야 하는 **다양한 책임**을 가지고 있다. 관심사 분리 AppConfig 등장 애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 별..
앞선 글에서 추가한 할인 정책을 애플리케이션에 적용한다. 일단 앞서 추가한 public class RateDiscountPolicy implements DiscountPolicy { private int discountPercent = 10; // 할인율 10% @Override public int discount(Member member, int price) { if (member.getGrade() == Grade.VIP) { return price * discountPercent / 100; // 10퍼센트 } else { return 0; } } } 이걸 적용하려면 일단 OrderServiceImpl을 조금 바꿔야 한다. (고정 할인 금액 => 할인율 적용 금액) OrderServiceImpl 수..