DI (dependency injection)
DI(dependency injection)란 쉽게 말해 어떤 부픔을 다른 부품 안에 집어 넣는 것이다.
다음과 같은 코드를 보자.
// composition HAS A //
// A를 생성하면 B를 자동으로 가지게 됨. 일체형
class A{
private B b;
public A(){
b = new B();
}
}
// Association HAS A //
// A와 B를 각각 생성 //
class A{
private B b;
public A(){}
public void setB(B b){
this.b = b;
}
public static void main(String[] args){
B b = new B();
A a = new A();
a.setB(a);
}
}
위의 association has a를 보면 b와 a 객체를 각각 생성하여 b를 a의 setB()메서드에 삽입한다.
이것을 b라는 부품(dependency=종속 객체)을 a라는 객체에 삽입(injection)한다고 할 수 있다.
이렇게 주입하는 방법에는 1.constructor를 사용하는 방법 (즉 위의 코드에서는 A클래스의 생성자에서 B형 객체를 받게하여 바로 주입)
2. setter를 사용하는 방법이 있다.(위의 코드에서 한 방법)
setter를 사용하는 방법에는 장점: 부품(b)을 쉽게 교체할 수 있다는 것이고
단점: 부품을 직접 만들어서 주입해야 한다.(즉 B b = new B();로 직접 부품(b)객체 생성)
스프링을 사용하면 부품을 직접 만들지 않아도된다.(객체를 생성하는 코드를 직접 작성하지 않아도 된다.)
IOC 컨테이너 (inversion of control)
위에서 의존성 주입을 봤는데
IOC 컨테이너는 부품들이 조립되어 담긴 컨테이너라고 할 수 있다.
일체형일때 부품을 만들어 조립하는 방법과 setter를 만들어 부품을 조립하는 방법을 그림으로 보자.
일체형일 때
부품을 각각 만들 때
위의 두 그림을 보면 부품을 각각 만들 때는 일체형일 때와 순서가 반대이다.
이렇게 부품들이 만들어지는 순서가 반대라서! INVERSION of control (= ioc) 이라고 하는 것이다.
즉 ioc컨테이너는 역순으로 부품들을 만들어서 조립된 객체들을 가지고 있는 컨테이너이다.
'java spring > DI' 카테고리의 다른 글
DI -4 xml파일을 Configuration클래스로 대체하기 (0) | 2021.04.28 |
---|---|
DI- 3 어노테이션 기반으로 의존성 주입하기 (0) | 2021.04.28 |
DI - 2 (0) | 2021.04.26 |