이번 포스팅에서는 스프링의 IoC, DI, 컨테이너에 대한 용어에 대해 알아보자. 이 용어들은 스프링에만 국한된 단어는 아니다. IoC(Inversion of Control) : 제어의 역전 단순하게는 제어권이 뒤바뀐다 해서 제어의 역전이라 부르고, 여러 곳에서 이 용어가 나온다. 기존 코드(전통적인 프로그래밍)는 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성, 연결, 실행했다(예를 들어, MemberService 관련된 구현체가 MemoryMemberRepository를 직접 생성하는 것). 필요한 것을 직접 생성하고 호출하고, 또 필요한 것이 생기면 다시 생성하고 호출하고... 한마디로 구현 객체가 프로그램의 제어 흐름을 스스로 제어했다. 어떻게 보면 자연스러운 흐름이다. 하지만 앞서 ..
이제 처음으로 돌아가 정액 할인 정책을 정률 할인 정책으로 변경해보자. 기존에는 이를 변경했을 때, 클라이언트 코드가 영향을 받았었다. 하지만, 현재는 AppConfig의 등장으로 사용 영역과 구성 영역(객체를 생성하고 구성)으로 나눠졌기 때문에 아래의 그림과 같이 구성 영역의 코드만 변경해주면 된다. FixDiscountPolicy를 RateDiscountPolicy로 변경해도 구성 영역만 영향을 받을 뿐, 사용 영역은 전혀 영향을 받지 않는다. ... private DiscountPolicy discountPolicy() { //return new FixDiscountPolicy(); return new RateDiscountPolicy(); } ... AppConfig의 discountPolicy(..
현재 만들어 놓은 AppConfig를 보면 중복이 있고, 역할에 따른 구현이 잘 보이지 않는다. 이를 수정해보자. package hello.core; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.DiscountPolicy; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.member.MemberRepository; import hello.core.order.OrderService; import hell..
앞서 생성한 OrderServiceImpl 클래스를 잠깐 살펴보자. 이 클래스는 주문 서비스에만 관련된 로직만을 수행해야 하는데, 이 안에서 private DiscountPolicy discountPolicy = new FixDiscountPolicy(); 구문을 통해 할인 정책 객체를 직접 생성을 하고 "FixDiscountPolicy"(구체적인 정책) 또한 사용하겠다고 직접 선택하게 된다. 즉, 클래스의 역할만 수행하는 것에 집중이 되어야한다. 이를 위해 애플리케이션의 전체적인 동작 방식을 구성하기 위해, 구현 객체를 생성하고 연결하는 책임을 가지는 별도의 설정 클래스를 만들어 줄 것이다. Appconfig 애플리케이션의 운영에 대한 전반적인 부분을 책임지는 매우 중요한 클래스이다. hello.cor..
앞서 만들었던 예제 1에 새로운 할인 정책을 개발하고 적용시켜 보자 새로운 할인 정책을 확장해보자. 한 기획자가 서비스 오픈 직전에 할인 정책을 지금처럼 고정 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률% 할인으로 변경하고 싶다고 요청했다. 이전 개발이 정말 객체 지향 설계 원칙을 잘 준수했는지 확인해보자. 이번에는 주문한 금액의 일정%를 할인해주는 정률 할인 정책을 추가할 것이다. 새로운 할인 정책 개발 RateDiscountPolicy 추가 discount 패키지에 RateDiscountPolicy 클래스를 추가한다. package hello.core.discount; import hello.core.member.Grade; import hello.core.member.Member; pu..
주문과 할인 도메인을 설계하고 개발해보자. 주문과 할인 도메인 설계 이전에 설계했던 주문, 할인 정책을 다시 살펴보면, 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용한다.(나중에 변경될 수 있다) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다.(미확정) 위 내용을 다이어그램으로 나타내면 다음과 같다. 주문 생성 : 클라이언트(main 메서드, 스프링 mvc의 경우 컨트롤러...)는 주문 서비스에 주문 생성을 요청한다. 회원 조회 : 할인을 위해서는 회원 등급이 필요하기 때문에 주문 서비..