의존성 주입(DI)의 구조
의존성 주입은 객체가 필요한 의존성을 생성자 인자, 팩토리 메서드 인자, 또는 속성 설정을 통해서만 정의하며, IoC 컨테이너가 이를 런타임에 주입하는 프로세스입니다. 이는 Service Locator 패턴과 달리 객체 생성의 제어를 프레임워크로 역전시킵니다.
IoC 컨테이너의 역할
IoC 컨테이너는 빈(Bean) 정의, 설정 메타데이터, 그리고 생명주기 관리를 통해 객체를 인스턴스화, 구성 및 조립합니다. Spring의 ApplicationContext, .NET의 IServiceProvider 같은 컨테이너는 의존성 해석, 순환 참조 검증, 서비스 스코프 관리를 수행합니다.
실무 주의점: 생성자 주입 vs 세터 주입
필수 의존성은 생성자 주입, 선택적 의존성은 세터 주입으로 구분합니다. 생성자 주입은 불변성과 명시적 의존성을 보장하지만, 순환 참조 발생 시 컨테이너가 BeanCurrentlyInCreationException을 발생시킵니다. 또한 스코프 서비스를 싱글톤에 주입하면 생명주기 제어 손실로 리소스 누수가 발생할 수 있으므로 주의가 필요합니다.