본문 바로가기
공부/web

DI(의존성 주입)과 IoC(제어의 역행)

by 밍미 2018. 5. 1.
DI(Dependency Injection, 의존성 주입).md

DI(Dependency Injection, 의존성 주입)

 

기존의 자바는 객체를 직접 만들어서 소유했는데, 이렇게 할 때 객체에 또 다른 클래스를 만들어 교체하고자 할 때 모든 소스를 변경해 다시 컴파일 해야 하는 문제점이 있었다. 이를 막기 위해 DI라는 개념을 도입했다.

Dependency Injection이란 프로그래밍에서 모듈간의 의존성을 모듈의 내부가 아닌 외부(컨테이너)에서 주입시켜주는 기능으로 , IoC(Inversion of Control, 제어의 역행)의 한 종류이다. 제어의 역행은 어떤 모듈이 사용할 모듈을 개발자가 결정하는 것이 아니라, 다른 모듈에게 선택권을 넘겨준다는 것을 의미한다. 외부에서 필요한 객체를 결정하기 때문에 개발자는 직접 연결 처리를 할 필요가 없고, 인터페이스를 이용해서 편리하게 개발할 수 있다.

의존성 주입에는 Constructor Injection과 Setter Injection 방식이 있다. (태그작성을 통한 방법만 설명하였지만 두 방법 모두 애노태이션을 이용해서 간단히 처리할 수도 있다.)

 

Constructor Injection(생성자를 이용한 의존성 주입)

Constructor Injection은 argument(전달 인자)를 갖는 생성자를 사용하여 의존성을 주입하는 방식이다. 태그를 사용하며, 생성자의 argument와 element는 class가 같은 것끼리 매핑한다. 만약 생성자가 같은 class의 argument를 가졌거나 primitive type(기본형 비객체 타입)인 경우 argument와 요소 간의 매핑이 불가능하다. 이 때 Page type을 지정하거나 순서를 지정할 수 있다.

 

Setter Injection

Setter Injection은 인자가 없는 기본 생성자를 사용해 객체를 생성한 후, setter 메소드로 의존성을 주입하는 방식으로, 태그를 사용한다. Class에 attribute(또는 setter 메소드 명)과 element의 ‘name’ attribute를 사용하여 매핑한다.

댓글