스프링 컨테이너에 등록한 스프링 빈들이 제대로 등록되었는지 확인해보자. 테스트 코드로 작성할 것이다. Test 폴더의 hello.core 아래 beanfind 패키지를 만들어주고 ApplicationContextInfoTest 클래스를 하나 만들자. ApplicationContextInfoTest.class package hello.core.beanfind; import hello.core.AppConfig; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public c..
이전까지의 포스팅은 순수한 자바만을 사용하여 DI를 적용했다. 이제 스프링을 본격적으로 사용해보자. 우선, 스프링 코드를 살펴보자. AppConfig package hello.core; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.DiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.member...
이번 포스팅에서는 스프링의 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..
앞서 만들었던 예제 1에 새로운 할인 정책을 개발하고 적용시켜 보자 새로운 할인 정책을 확장해보자. 한 기획자가 서비스 오픈 직전에 할인 정책을 지금처럼 고정 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률% 할인으로 변경하고 싶다고 요청했다. 이전 개발이 정말 객체 지향 설계 원칙을 잘 준수했는지 확인해보자. 이번에는 주문한 금액의 일정%를 할인해주는 정률 할인 정책을 추가할 것이다. 새로운 할인 정책 개발 RateDiscountPolicy 추가 discount 패키지에 RateDiscountPolicy 클래스를 추가한다. package hello.core.discount; import hello.core.member.Grade; import hello.core.member.Member; pu..