백엔드/Spring

Spring 이론 - DI, IoC | TIL_147

ran4 2022. 9. 28. 23:42

https://www.youtube.com/playlist?list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T

스프링 강의를 듣고 정리한 내용입니다

 


 

 

DI(Dependency Injection)

객체를 생성하고 객체를 조립한다

 

 

Dependency들을 조립하기

1. 일체형으로 관계를 가진 경우

Composition has a

class A {
private B b; //종속 객체 == 부품

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

 

2. 조립형으로 관계를 가진 경우 

- 외부에서 생성하여 객체를 사용하는 방식을 사용한다 

Association has a

class A {
private B b;

public A() {}

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

 

 

 

** DI가 중요한 이유

일체형 프로그램과 조립형 프로그램이 존재할 때

결합도는 조립형이 더 낮기 때문에 코드 수정에 유연하다 

 

 

 

DI를 조립하는 방식 2가지

 

1. setter로 조립(주입)

Setter Injection

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

a.setB(b); //Injection

 

2. 생성자로 조립(주입)

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

 

두 코드 모두 B라는 객체를 A에 주입한다

이러한 조립형으로 구현하는 경우, 부품을 조립해야한다는 번거로움이 생긴다

-> 조립의 번거로움을 해결할 수 있는 도구를 사용한다

-> 이 기능을 제공하는 도구가 스프링이다

-> IoC 컨테이너로 관리한다

 

 

IoC 컨테이너

객체(부품)를 생성하고 조립을 할 때 소프트 웨어를 담는 그릇이 필요한데,

이 그릇을 컨테이너라고 한다

-> 그 중에서도 IoC 컨테이너라고 한다

xml 파일 혹은 Annotation을 이용하여 간편하게 사용 할 수 있다 

 

 

결합해야 할 부품간의 순서 - DI 순서

결합형으로 만들어지는 프로그램은 일반적인 경우와 달리 역순으로 만들어진다

 

ex)

일체형이 A -> B -> C -> D의 순서로 부품이 만들어질 때

결합형은 D -> C -> B -> A의 순서로 만들어진 후 결합된다

 

IoC = Inversion of Control Container 

-> 역순으로 객체를 생성하여 결합하는 컨테이너이다