개발자가 제어하는 권한들을 프레임워크에 위임하는 설계방식
객체의 생성, 의존성 주입, 생명주기까지 통틀어서 개발자가 아닌 프레임워크가 관리하는 방식입니다.
Spring에서는 위와 같은 작업을 IoC Container가 담당합니다.
IoC Container는 여러 구성요소로 이루어져 있습니다.
이를 통해 취할수 있는 장점은 무엇이 있을까요?
이러한 장점에 큰 영향을 주는 의존성관리 (DI, DL)의 개념을 알아보겠습니다.
IoC Container가 필요한 의존성을 자동으로 주입해주는 방식
이를통해 객체내부에서 필요한 객체를 생성하지 않고 외부에서 주입받게 됩니다.
DI방식을 이용함으로서 테스트용이성, 컴포넌트간 결합도를 낮춰주는 장점을 가지게 됩니다.
public class OrderService {
private final OrderRepository orderRepository;
public OrderService(OrderRepository orderRepository) {
this.orderRepository = orderRepository; // IoC 컨테이너가 외부에서 주입해줌
}
}
IoC Container에 등록된 의존성을 조회해서 주입하는 방식
객체 내부에서 필요한 객체를 개발자가 직접 조회하여 등록된 객체를 가져와서 사용하는 방식임
ApplicationContext context = ...;
OrderRepository repository = context.getBean(OrderRepository.class); // 직접 조회
개발중 느끼지 못했지만 편했던것들이 IoC 컨테이너가 자체적으로 관리해주고 있다는 것을 다시한번 알게 되었습니다, 다음 포스트에는 생성자 주입이 권장되는 이유를 포스팅 하겠습니다