IOC(Inversion of control)

자바가 등장하고 자바 기반으로 애플리케이션을 개발하기 시작하던 최초의 시기에는 자바 객체를 생성하고 객체간의 의존관계를 연결시키는 등의 제어권을 개발자가 직접 가지고 있었다.

그러나 서블릿, EJB가 등장하면서 개발자들이 가지고 있던 제어권과 객체의 생명주기를 관리 하는 권한이 서블릿과 EJB를 관리하는 컨테이너에게 넘어갔다.

이처럼 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀐것을 의미하는 것이 제어권의 역전, 즉 IoC라는 개념이다.


DL(Dependency Lookup)

IoC 컨테이너는 각 컨테이너에서 관리해야 하는 객체들을 관리하기 위한 별도의 저장소를 가지게 되는데,

이 IoC컨테이너가 관리중인 객체 저장소(Pool)에서 객체를 검색하여 참조하는 방법이다.

(컨테이너에서 제공하는 api를 이용하여 찾고자 하는 bean을 lookup하는 방법)


DI(Dependency Injection)

Spring에서 새롭게 지원하는 IoC의 한 형태로써 각 계층 사이, 각 Class 사이에 필요로 하는 의존관계가 있다면 이를 컨테이너가 자동적으로 연결시켜 주는 것(@Autowired, @Qualifier)으로 각 Class 사이의 의존관계를 Bean 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해 주는 것이다.


외부에서 객체를 생성후 주입시켜주게 되면 두 객체사이에 약한 결합으로 형성되게 된다.

그러나 내부에서 new를 사용하여 객체를 생성하게되면 두 객체사이에 강한 결합으로 형성이 된다.

강한 결합으로 생성시 객체에대한 의존성이 강해지므로 객체의 교체가 어렵게 된다..

반면 약한 결합으로 객체를 생성한다면 의존성이 약해지므로 객체를 쉽게 교체할 수 있게된다.


DI의 종류로는 Setter Injection, Constructor Injection, Method Injection이 있다.


Setter Injection - Class 사이의 의존관계를 연결시키기 위해 Setter() 메소드를 이용하는 방법.
Constructor Injection - Class 사이의 의존관계를 연결시키기 위해 생성자를 이용하는 방법.
Method Injection - Method Injection은 Setter Injection과 Constructor Injection이 가지고 있는 한계점을 극복하기 위하여 지원하고 있는 DI의 한 종류다. Singleton 인스턴스와 Non Singleton 인스턴스의 의존관계를 연결할 필요가 있을 때 사용한다.




'Programming > Spring' 카테고리의 다른 글

jstl 간단 사용법  (0) 2018.05.13
jQuery 간단 사용법  (0) 2018.05.13
Spring Framework  (0) 2018.05.12
CRUD구현하기 - Back end  (0) 2018.02.16
CRUD 구현하기 - front end  (0) 2018.02.16

+ Recent posts