스프링 핵심 원리 - 기본편
객체 지향 원리 적용을 공부한 내용이다.
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 컨테이너라고 한다.