스프링/1. 스프링 핵심 원리

17강. IoC, DI, 컨테이너

sdafdq 2023. 7. 16. 18:38

IoC 제어흐름 역전

프레임워크가 알아서 구현객체 생성,

본래 클라이언트가 스스로 객체생성, 연결, 실행이 자연스러운 흐름이었지만, 

AppConfig 등장 이후 각 구현체는 자신의 로직만 담당.

 

프레임워크 vs 라이브러리

프레임워크: 내가 작성한 코드들을 제어, 대신 실행

라이브러리: 내가 제어 흐름을 담당하는 코드를 직접 짜면 라이브러리

 

 

정적인 객체 의존관계

코드만 보고 알 수 있는 의존관계들.

public class OrderServiceImpl implements OrderService{
    private MemberRepository memberRepository;
    private DiscountPolicy discountPolicy;

    public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }
    @Override
    public Order createOrder(Long memberId, String itemName, int itemPrice) {
        Member member = memberRepository.findById(memberId);
        int discountPrice = discountPolicy.discount(member, itemPrice);

        return new Order(memberId, itemName, itemPrice, discountPrice);
    }
}

예를 들면 여기서, MemberRepository와 DiscountPolicy 인터페이스를 참조한다는 걸 알고 있음.

근데 어떤 구현체가 올 지는 모름.

 

 

동적인 객체 의존관계

실행시점에 볼 수 있는 의존관계.

 

AppConfig 덕에 정적인 의존관계를 전혀 손 안대고 바꿀 수 있음

이게 의존관계 주입의 장점

 

 

 

이렇게 의존관계 주입해주는 걸 컨테이너, DI 컨테이너 라고 부름.

 

AppConfig가 여러 단어로 불림

AppConfig, 오브젝트 팩토리, 어셈블러 등등..

 

 

'스프링 > 1. 스프링 핵심 원리' 카테고리의 다른 글

19강. 스프링 컨테이너 생성  (0) 2023.07.16
18강. 스프링으로 변환  (0) 2023.07.16
16강. Rate할인으로 변경  (0) 2023.07.16
15강. AppConfig 리팩토링  (0) 2023.07.16
14강. 관심사의 분리  (0) 2023.07.16