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 |