본문 바로가기
java spring/DI

DI -1

by 킹차니 2021. 4. 26.

 

뉴렉처님 강의

 

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를 만들어 부품을 조립하는 방법을 그림으로 보자.

 

일체형일 때

composition has a

 

부품을 각각 만들 때

association has a

위의 두 그림을 보면 부품을 각각 만들 때는 일체형일 때와 순서가 반대이다. 

이렇게 부품들이 만들어지는 순서가 반대라서! 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