IoC Container에 대해

na.ram·2025년 7월 22일

Spring

목록 보기
12/13
post-thumbnail

🔎 IoC Container?

기본 개념

IoC(Inversion of Control) Container는 Spring Framework의 핵심 기능 중 하나로
객체의 생성, 구성, 생명주기 관리를 개발자가 아닌 컨테이너가 제어하는 설계 원칙입니다.
기존에는 개발자가 직접 객체를 생성하고 의존성을 관리했지만, IoC는 제어권을 컨테이너에 위임하여 결합도를 낮추고 유연한 설계를 가능하게 합니다.

제어의 역전 (Inversion of Control)

객체의 생성과 의존성 관리를 개발자가 직접 하지 않고, 컨테이너가 대신 처리하도록 위임하는 방식으로 개발자 → 컨테이너로 제어권이 역전(Inversion)된다고 하여 제어의 역전이라고 합니다.

기존 방식

객체의 생성 및 의존성 관리의 제어권이 개발자에게 있음

public class B {
    public B() {
    }
}
...

public class A {
    private B b;
    
    public A(B b) {
        this.b = b;
    }
}

Spring IoC 방식

스프링은 @Component 어노테이션이 선언된 클래스를 어플리케이션 시작 시, 자동 스캔하여 Bean으로 등록하고, 생성자 주입 방식으로 필요한 의존성을 자동으로 주입함

@Component
public class B {
    public B() {
    }
}

@Component
@RequiredArgsConstructor
public class A {
    private final B b;
}

IoC Container 종류

BeanFactory

스프링 컨테이너가 관리하는 객체를 Bean이라고 하는데 이 Bean의 등록, 생성, 조회, 반환 등의 관리를 합니다.
BeanFactory는 단순히 컨테이너에서 객체를 생성하고 DI를 처리하는 기능만을 제공합니다.
그러므로 보통은 BeanFactory를 사용하기 보다는 이를 확장한 ApplicationContext를 사용합니다.

ApplicationContext

BeanFactory의 하위 인터페이스로, DI 뿐만이 아니라 추가 기능을 제공합니다.

제공되는 추가 기능은 아래와 같습니다.

  • 웹 어플리케이션에서 사용하기 위한 WebApplicationContext와 같은 어플리케이션 계층별 컨텍스트
  • Spring AOP 기능과의 손쉬운 통합
  • 메시지 리소스 처리 (국제화 지원 목적)
  • 이벤트 발행

0개의 댓글