스프링의 가장 핵심적인 역할 중 하나는 DI(Dependency Injection, 의존성 주입)를 통해 객체(부품)들을 조립해주는 것이다. 이러한 DI와 함께 반드시 알아야 할 또 하나의 중요한 개념이 바로 IoC 컨테이너이다.
스프링의 가장 기본적인 코어에 해당되는 능력이 부품을 조립해준 기능인데 그러기 위해서는 여러 가지 부품들을 주문서에다가 입력해서 스프링에게 제공해야한다. 스프링은 우리가 제공해주는 주문서대로 부품을 생성하고 조립을 하게 돼 있다. 그럼 우리는 어떠한 부품이 필요하고 그 부품들이 어떠한 조립 관계를 가져야 된다는 것을 명세화할 수 있어야 한다. 컴퓨터 조립을 맡길때 메인보드, VGA 카드, 메모리 등 필요한 부품을 주문서에 작성하면, 조립자가 그에 맞게 부품을 조립해준다.
스프링은 XML 파일 혹은 어노테이션을 통해 주문서를 작성할 수가 있다. XML 파일은 가장 기본적인 방식으로, XML 파일에 객체와 의존성 관계를 명시하여 스프링이 이를 읽고 처리하도록 하는 방식이고 어노테이션 방식은 코드 내에서 어노테이션을 사용하여 스프링에게 객체와 의존성 관계를 알리는 방식이다.
스프링에서 IoC 컨테이너는 사용자가 작성한 주문서(XML 파일 또는 어노테이션)에 따라 객체를 담아두는 그릇 역할을 한다. 그리고 주문서(XML 파일 또는 어노테이션)에 따라 필요한 객체(부품)를 생성하고, 그 부품들 간의 관계를 조립해 프로그램을 동작하게 한다.
IoC 컨테이너는 객체 생성 → 의존성 주입 → 객체 간 조립의 과정을 수행한다.
그렇다면 IoC 컨테이너는 부품(객체)을 담고 조립하는 역할을 하니 이 컨테이너의 이름은 부품 컨테이너 혹은 Dependency 컨테이너라고 말하는 게 정확할텐데 굳이 IOC 컨테이너 이렇게 얘기를 하는 이유는 뭘까? 그 이유는 객체 조립의 순서에서 찾을 수 있다.
일체형으로 객체를 생성할 때, 객체는 A → B → C → D의 순서대로 생성된다. 즉 큰 객체 A가 먼저 생성되고, 그 안에서 차례로 B, C, D가 생성된다. 이 방식은 내부적으로 객체가 만들어지기 때문에 사용자는 어떤 객체가 어떻게 생성되는지 모른다.
반면에, 조립형(Dependency Injection) 방식에서는 객체가 역순으로 생성된다. D와 같은 작은 부품이 먼저 생성되고, 그 부품을 필요로 하는 C가 그다음에 생성된다. 계속해서 B와 A도 역순으로 생성되어 조립된다. 이처럼 의존성 주입을 통한 조립형 방식에서는 객체의 생성 순서가 역순이 된다.
이 역순이라는 개념을 IoC(Inversion of Control, 제어의 역전)한다. 컨테이너에 단순하게 부품을 담고 있는 기능이라면 Dependency 컨테이너라고 할 텐데 그 부품이 조립까지 돼서 담겨진다는 의미를 강하게 부여하려는 의미로 이 컨테이너를 IOC 컨테이너라고 한다.
그럼 IoC 컨테이너 기능을 스프링이 갖고 있다고 하면 우리는 이 컨테이너에 내가 원하는 부품이 생성되고 조립될 수 있도록 하는 지시서를 작성해 볼 필요가 있을 것이다. 다음 시간에는 그 지시서를 만드는 방법 즉 XML 파일을 작성하는 것을 배워보자.
참고자료
[1] 유튜브 채널 뉴렉처 - 스프링 프레임워크 강의 4강 - IoC(Inversion Of Control) 컨테이너
'🖥️ Backend > Spring' 카테고리의 다른 글
[Spring] 6.스프링 DI 설정을 위해 이클립스 플러그인 설치하기 (3) | 2024.10.20 |
---|---|
[Spring] 5.Spring없이 Dependency를 직접 Injection하기 (0) | 2024.10.08 |
[Spring] 3.DI(Dependency Injection) (0) | 2024.10.01 |
[Spring] 2.느슨한 결합력과 인터페이스 (0) | 2024.09.30 |
[Spring] 1.Spring 소개와 학습 안내 (1) | 2024.09.27 |