스프링 핵심 원리 - 기본편
객체 지향 원리 적용을 공부한 내용이다.
AppConfig.class 사용으로 애플리케이션 영역을 사용 영역과 객체를 구성하고 구성(Configuration)하는 영역으로 분리하였다.
package hello.core;
import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.member.MemberRepository;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
public class AppConfig {
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
OrderServiceImpl도 AppConfig가 생성한다. 그리고 AppConfig는 OrderServiceImpl이 아닌 OrderService인터페이스의 다른 구현 객체를 생성하고 실행할 수도 있다. OrderServiceImpl은 DiscountPolicy인터페이스에 의존한다. 실제 어떤 구현 객체자 사용될지는 모른다.AppConfig처럼 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것을 IoC 컨테이너 또는 DI 컨테이너라고 한다.