본문 바로가기

Java dev/spring

IOC(Inversion of Control)


IOC(역제어, 제어권의 반환)

기존 개발자들이 New연산자, 인터페이스 호출, 팩토리 호출방식으로
객체의 인스턴스를 생성함으로서 인스턴스 생성방법에 대한 제어권을 개발자들이 가지고 있었다. 그러나 IOC는 인스턴스 생성의 제어를 개발자 본인이 아닌 다른 누군가에게 반환 준다는 개념이다. 여기서 말하는 다른 누군가란 bean을 관리해주는 컨테이너이다.
즉, IOC란 인스턴스의 생성부터 소멸까지의 인스턴스의 생명주기 관리를 내가 아닌 컨테이너가 대신 해준다는 뜻이다.

Spring컨테이너
Spring컨테이너는 IOC를 지원한다. Spring컨테이너란 beans를 관리하고 애플리케이션 중요부분을 형성한다. 즉, Spring 컨테이너는 메타데이터(XML)를 통해 bean을 인스턴스화 하고 이를 조합하여 관리하는 역할을 한다. 컨테이너는 관리되는 bean들을 의존성 삽인(Dependency Injection)을 통해 IOC를 지원한다.

DI(Dependency Injection)
DI는 Spring컨테이너가 IOC를 지원하는 새로운 형태이다.
클래스 사이의 의존관계를 빈설정정보를 바탕으로 컨테이너가 자동적으로 연결해주는 것을 의미한다.

Setter Injection : Setter Method를 명시하여 자동적으로 의존성삽입이 이루어지는 유형
Constructor Injection : 인자를 가지고 있는 생성자를 호출할때 의존성삽입이 이루어지는 유형