본문 바로가기
코딩/Spring

[Spring] 스프링 DI & IoC 이해하기

by 인생최적화 2020. 6. 22.
반응형

 

스프링 DI & IoC 더 알아보기

 


 

 

스프링의 가장 기본적인 능력은 객체를 생성해주고 조립해주는 것입니다. 그것으로 사용되는 용어가 Dependency Injection(DI), Inversion of Control(IoC)입니다. DI를 번역하면 '종속성 주입'이지만 쉽게 이해하기 위해서 '부품 조립'으로 생각하면 됩니다.

직접 객체 인스턴스를 생성하여 사용하는 일체형 방식이 있지만 외부 설정을 통하여 객체 생성없이 인스턴스를 만들어내는 조립형 방식이 스프링을 특별하게 만든 이유는 결합력이 느슨하고 느슨한만큼 부품을 쉽게 갈아끼울 수 있기 때문입니다. 부품을 갈아끼운다거나 업데이트를 고려한다면 조립형식으로 결합력이 약하게 프로그램을 만드는게 바람직하다고 할 수 있습니다.

 

 

일체형 방식의 작업은 사용자 입장에서 인스턴스 내용을 잘 모르고 그것을 교체할 수도 없습니다. 조립하는 방식은 내가 필요한 부품을 별도로 설정을 해서 필요에 따라 조립하는 형식으로 일을 처리할 수 있습니다. 부품이라는 것의 객체를 다른 말로 'Dependency'라고 하고 그 부품을 조립하는 작업을 'Injection'이라고 하는 것입니다.

부품을 조립형식으로 만들게 되면 쉽게 갈아끼울 수 있다는게 장점이고, 따로 조립할 부품을 만들어야 하는게 단점입니다. Dependency를 조립할 때는 두 가지 방법이 있습니다. 'setter'함수를 통해서 생성할 수 있고, 'constructor'를 통해서 생성할 수 있습니다.

 

 

조립하는 것의 불편함은 '조립하는 것'인데, '조립을 해주는 서비스'를 이용하면 됩니다. 그 서비스를 제공하는 역할을 스프링이 담당하고 있는 것입니다. 우리가 원하는 부품들이 무엇이 있는지, 우리가 어떤 부품을 결합하길 원하는지만 설명해주면 스프링이 그 일을 알아서 처리해줍니다.

XML파일과 Annotation은 내가 필요한 부품의 주문서 역할을 합니다. 만약 우리가 주문서를 작성했으면 그 주문서대로 박스에 담을 것입니다. 스프링도 주문서에 입력되어 있는 내용대로 객체를 생성해서 그 내용들을 담을 공간이 필요한데, 그것을 컨테이너라고 합니다. 그래서 이 컨테이너를 'Dependency Container'라고 할 수도 있습니다.

 

 

하지만 그것을 Inversion of Control, IoC라고 부르는 이유가 있습니다. 일체형 객체는 A-B-C-D처럼 순차적으로 생성이 되는 방식입니다. A를 생성하면 나도 모르는 사이에 B, C, D가 생성되는 것입니다. 반면에 일체형이 아닌 결합형의 순서는 반대가 됩니다. D를 만들면 C가 만들어지고 결합, B가 만들어지고 결합하여 A까지 만들어지는 방식입니다. 조립에 대한 순서가 역순으로 객체를 생성하기 때문에 IoC, 제어반전이라고 부릅니다.

이것들을 스프링이 가지고 있고, 스프링의 주문서에 내가 원하는 부품이 생성되고 조립해주는 지시서를 작성할 필요가 있습니다.

 

 


 

본 내용은 'Newlecture'님의 강의를 듣고 정리한 내용입니다

'인생최적화'

 

 

 

반응형

댓글