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가 사용하는 방식이다.
이러한 형태를 조립형이라고 한다. 셋팅을 해서 조립해서 사용하는 것이다.
- 일체형
- 일체형의 코드
A a = new A();
- 조립형
- 조립형의 코드
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 이다.
'Spring' 카테고리의 다른 글
Spring의 DI는 왜 생성자 주입으로? (0) | 2021.12.14 |
---|---|
[SpringBoot With Aws] Spring 웹 계층 (0) | 2021.07.23 |
[SpringBoot With Aws] JUnit 단위 테스트 (0) | 2021.07.22 |
@Controller 와 @RestController의 차이 (0) | 2021.07.13 |
IoC (Inversion of Control) (0) | 2021.07.03 |