담비의 개발블로그

[Spring Boot]IoC 컨테이너란? 본문

언어&프레임워크/Spring&Spring Boot

[Spring Boot]IoC 컨테이너란?

담비12 2024. 6. 22. 22:21
Inversion of Control

 

"Inversion of Control"은 직역하면 "제어 역전"이다.

객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다. 조금 더 쉽게 말하자면 프로그램 제어의 주체를 개발자가 아닌 외부 프레임워크나 컨테이너에 넘기는 것이다.

 

 

IoC의 장점
  1. 코드의 의존성을 외부에서 주입함으로써 컴포넌트 간의 결합도가 낮아지고, 이를 통해 컴포넌트를 쉽게 교체하거나 재사용 할 수 있다. (컴포넌트 : 스프링 컨테이너에서 관리되는 일반적인 빈을 의미한다. 어노테이션 안에 @component가 있다.)
  2. 객체의 의존성을 외부에서 주입받기 때문에, 모의 객체(mock objects)를 사용하여 단위 테스트를 쉽게 작성할 수 있다.
  3. 코드가 모듈화되어 있어 수정이 용이하고, 특정 컴포넌트를 변경하더라도 다른 부분에 미치는 영향을 최소화할 수 있어 유지보수성이 향상된다.

(모듈화 : 코드의 구조와 조직을 개선하기 위해 하나의 파일에 모든 코드를 작성하지 않고, 여러 파일과 패키지로 나누어 관리하는 것을 의미한다. 스프링부트에서는 service파일, DTO파일, Repository파일 등으로 나누는 것을 예시로 들 수 있다.)

 

 

컨테이너란?

 

애플리케이션에서 객체의 생성, 관리, 의존성 주입, 생명주기 관리 등을 책임지는 핵심 컴포넌트이다. 컨테이너는 빈(Bean)이라고 불리는 객체들을 관리하며, 이 빈들은 스프링 애플리케이션의 핵심 기능을 구성한다.

 

https://dambi1224.tistory.com/49

 

Annotation이란?

어노테이션(Annotation)- 사전적인 의미는 주석을 의미한다. 하지만 코딩할땐 다른의미로 쓰인다.- 코드 사이에 주석처럼 쓰이고, 특별한 의미와 기능을 수행하도록 하는 기술이다.- 자바 코드에 메

dambi1224.tistory.com

 

 

IoC컨테이너란?

 

프레임워크의 객체를 생성하고 관리하고 책임지고 의존성을 관리해주는 컨테이너가 IoC컨테이너이다.

인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다.

객체관리 주체가 프레임워크(Container)가 되기 때문에 개발자는 로직에 집중할 수 있는 장점이 있다.

 

구글에서 개발한 IoC 컨테이너 : Google Guice
스프링 IoC 컨테이너 : BeanFactory, ApplicationContext

 

 

내용을 정리하자면 IoC는 소프트웨어 엔지니어링에서 객체의 생성과 객체 간의 의존성을 관리하는 디자인 패턴이다. 그리고 IoC컨테이너는 IoC를 구현하는 데 사용되는 프레임워크 또는 라이브러리이다. 

 

 

스프링 IoC 컨테이너

 

BeanFactory: 스프링의 가장 기본적인 IoC 컨테이너로, 단순한 빈 생성 및 관리를 수행ㅎ다.
ApplicationContext: BeanFactory를 확장한 인터페이스로, 보다 많은 기능을 제공한다. AOP, 이벤트 시스템, 메시지 리소스 처리 등을 지원한다.