DI(Dependency Injection)란?
종속성 주입으로, 사용자가 원하는 객체 내부의 값(객체 등)을 Setter나 생성자를 통해 설정해주는 것이다.
Composition has a (일체형)
class A
{
private B b;
public A(){
b = new B();
}
}
B가 A 내부에서 정해진다.
Association has a (조립형)
class A
{
private B b;
public A(){
}
public void setB(B b){
this.b=b;
}
}
B를 A 외부에서 setter를 통해 가져와 정한다.
이 때 조립형에서 DI를 설명할 수 있는데
B b = new B(); // Dependency - 부품
A a = new A();
a.setB(b); // Injection - 조립
--------------------------------------------
B b = new B(); // Dependency - 부품
A a = new A(b); // Injection - 조립
b 객체는 A에 끼울 부품으로 Dependency라고 하며, 이를 setter 등을 통해 조립해 주는 것을 Injection이라고 한다.
생성자를 통해 Dependency를 주입해주면 Construction Injection,
Setter를 통해 Dependency를 주입해주면 Setter Injection이라고 한다.
이 때 부품을 대신 조립해주는 역할을 수행하는 소프트웨어 도구가 Spring이다.
사용자가 어떤 부품을 조립하길 원하는지 설정만해주면 Spring은 알아서 DI해준다.
IoC(Inversion of Control) Container란?
부품을 담아두는 컨테이너로, 대신 부품을 조립/생성해주며 작은 부품부터 시작하여 점점 더 큰 부품에 결합시켜나간다.
만약 A안에 B 객체가 일체되어 있고, B안에 C가 일체되어 있고, C안에 D가 일체되어 있다고 가정해보자.
아래와 같은 코드를 지닌 상태로, A가 먼저 생성되고 그다음 B, C, D 순서로 객체가 생성될 것이다.
class A
{
private B b;
public A(){
b = new B();
}
}
하지만 조립형에서는 반대이다.
B b = new B(); // Dependency - 부품
A a = new A();
a.setB(b); // Injection - 조립
위 코드처럼 B가 먼저 생성되고 A가 생성 되는 것을 알 수 있는데,
따라서 D->C->B->A 순서로 부품이 생성되고 결합이 될 것이다.
IoC는 이처럼 부품 생성과 결합의 순서가 역순으로 진행되는 컨테이너를 뜻한다.
'뉴렉쳐 스프링 프레임워크 정리 > Part1. DI' 카테고리의 다른 글
[Spring 개념정리] Java를 통한 Configuration (0) | 2023.07.14 |
---|---|
[Spring 개념정리] 어노테이션을 이용한 객체생성 (0) | 2023.07.14 |
[Spring 개념정리] @Autowired 어노테이션을 이용한 DI (0) | 2023.07.14 |
[Spring 개념정리] xml을 사용한 DI 및 IoC 컨테이너 사용법2 (0) | 2023.07.14 |
[Spring 개념정리] xml을 사용한 DI 및 IoC 컨테이너 사용법 (0) | 2023.07.14 |