본문 바로가기
Spring

DI(의존성 주입)

by sangfeeeeel 2021. 7. 3.

DI → 종속성주입(?)

  • 한글로 해석해도 난해하다..
  • 이 설명에선 부품조립으로 대체해서 이해해 보자.

Composition has a

class A
{
        private B b;

        public A(){
            b = new B();
    }
}

위의 코드에선 A가 B를 사용하기 위해 A가 B를 갖고있다.

이러한 형태를 일체형으로 가졌다고 하여 has a 관계라고 한다.

위의 코드를 B를 A의 부품으로 가졌다고 해보자.

이러한 부품을 Dependency라고 한다.


Association has a

class A
{
    private B b;

    public A(){
        ~~b = new B();~~
    }

    public void setB(B b){
        this.b = b;
    }
}

위의 코드에선 A가 B를 직접 생성하지 않고 외부에서 생성하여

그 생성을 메소드로 셋팅하여 그 객체를 A가 사용하는 방식이다.

이러한 형태를 조립형이라고 한다. 셋팅을 해서 조립해서 사용하는 것이다.


  • 일체형

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7f610c26-2cbf-4639-9413-e8a1c3918365/Untitled.png

  • 일체형의 코드
A a = new A();
  • 조립형

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6bfb44c0-3d75-44a9-b7f5-793f1911c1e3/Untitled.png

  • 조립형의 코드
B b = new B();
A a = new A();

a.setB(b);

위의 두 형태중에 우리가 프로그램을 만들때 많이 사용하는 방식은 조립형이다.

결합력이 훨씬 낮아지고 부품을 쉽게 갈아끼울수 있기 때문이다.


위의 코드중 조립형의 코드에서 B는 A의 부품이다. B를 A에게 꽂아야하기 때문에

이 말을 Dependenct Injection 이라고 한다.

부품을 조립형으로 만들때 부품을 쉽게 바꿀 수 있다는 장점이 있고

단점은 부품을 조립해야한다는 불편함이 있다는 것이다.

부품을 조립할때는 2가지 방법이 있다. 하나는 Setter함수를 통해 조립하는 것이고

다른 하나는 생성자를 통해 조립할 수 있다.


아래는 2가지 방법의 코드이다.

  • Setter Injection
    B b = new B();
    A a = new A();
    

a.setB(b);


-   Construction Injection

B b = new B();
A a = new A(b);

```

이렇게 조립을 도와주는 역할을 하는것이 Spring 이다.