본문 바로가기

Spring/Dependency Injection

[Spring Framework] IoC 컨테이너

728x90
반응형

'뉴렉처' 님의 채널(www.youtube.com/user/newlec1)을 바탕으로 제작한 블로그 글입니다:)

 

 

 

저번 시간에 '종속성 주입'이라고 불리는 Dependency Injection, 이하 DI에 대해서 알아봤는데요,

 

 

 

이번에는 그와 관련된 IoC 컨테이너에 대해서 자세하게 배워보도록 하겠습니다.

 

 

 

Spring이 부품을 조립하기 위해서는, 우리가 어떤 부품을 필요로 하는지 일종의 주문서를 넘겨주어야합니다.

따라서 어떤 부품이 필요하며 어떻게 이 부품들을 조립해야하는지에 대한 내용을 주어야하는데,

이를 위해서 XML이나 Annotation을 사용합니다.

 

 

 

 

컨테이너는 우리가 흔히 아는 것처럼 무언가를 담는 큰 상자와 같은 역할을 합니다.

 

이 때, Spring에서의 IoC 컨테이너는 우리가 주문서를 통해 요청한 부품(객체)들을 생성해서 담을 뿐만 아니라,

그 부품들을 조립하여 만든 더 큰 부품(객체)들 또한 보관하는 곳입니다.

계속해서 부품을 조립하다 보면 거의 완성품에 가까운 모습을 띤 부품까지도 담아내게 됩니다.

 

 

 

그러면 왜 이 컨테이너의 이름이 하필이면 IoC 컨테이너인걸까요?

 

그 정답은 바로 부품들이 생성되고, 연결되는 관계에 있습니다.

IoC 컨테이너에서 부품들이 생성되고 연결될 때에, 가장 먼저 작은 부품부터 생성해서 점차 큰 부품으로 조립되는 모습을 볼 수 있습니다.

즉, 작은 부품을 결합시켜 큰 부품을 만들고, 그 큰 부품들을 결합시켜서 더 큰 부품을 만드는 것입니다.

 

 

 

 

하지만 만약 우리가 조립형이 아닌 일체형을 사용하여 제품을 만든다면 어떻게 될까요?

A가 B라는 부품을 필요로 하고, B는 C라는 부품을, C는 D라는 부품을 필요로 한다고 가정해봅시다.

 

 

 

만약 일체형이라면, A()의 안에서 B를 set하기 위해 호출하고, B는 다시 C라는 부품이 필요하여 호출하고, C는 D의 부품이 필요하여 호출하게 됩니다.

이를 화살표로 나타내면 컨트롤의 흐름이 A->B->C->D로 가는 것을 볼 수 있습니다.

 

 

 

만약 결합, 즉 조립형의 경우라면, 가장 작은 부품인 D부터 만들기 때문에 컨트롤의 흐름이

A<-B<-C<-D로 가는 것을 알 수 있습니다.

따라서 흐름이 역순이 되었음을 알 수 있습니다.

이는 아래의 그림과 같이 간단히 나타낼 수 있습니다.

 

 

 

 

우리는 이를 Inversion of Control이라고 할 수 있고, 이를 간단히 줄여 IoC Container라고 사용하게 됩니다.

 

 

 

728x90
반응형