스프링/개념

IoC(Inversion Of Control) 컨테이너와 스프링 빈(Bean)

문상휘파람 2024. 9. 30. 17:57

앞서 설명한 의존성 주입(Dependency Injection, DI)은 IoC의 한 형태입니다. 

 

도대체 무슨 말일까요? 

 

이를 이해하기 위해서는 IoC를 이해해야 합니다.

 

IoC

IoC란 흔히 "제어의 역전" 이라고 불립니다.

객체의 생성과 소멸 등등을 책임졌던 개발자의 객체 제어권이 바뀌었다는 소리입니다.

 

일반적으로 개발자는 객체를 직접 생성하고, 메서드를 호출하여 코드를 작성하였습니다.

하지만 IoC에서는 직접 객체를 생성하고 호출하는 것이 아니라, 외부에서 객체를 생성하거나 호출합니다.

 

이를 통해 개발자는 코드를 작성할 때 의존성을 최소화하고 더욱 유연하게 코드를 작성할 수 있습니다.

 

위의 질문을 해결하자면, Spring Framework는 IoC 컨테이너를 이용하여 의존성 관리 및 의존성 주입을 수행합니다.

 

그렇다면 IoC는 어떠한 방식으로 객체를 찾아올까요?

 

먼저, 스프링 컨테이너가 관리하는 객체를 빈(Bean)이라고 부릅니다.

또한 이 Bean들을 관리하는 컨테이너Bean Factory라고 하는데, 이는 위에서 설명한 IoC 컨테이너의 구현체 중 하나입니다.

 

또, 이 Bean Factory에 추가적인 기능들을 붙여서 만든 것이 ApplicationContext입니다.

보통은 Bean Factory 보다는 ApplicationContext를 많이 사용합니다.

이 컨테이너가 Bean으로 등록된 객체를 관리합니다.

그러면 어떻게 자바 객체를 찾을까요?

 

1. Component Scan을 통해서 등록된 빈을 찾는다.

@Controller, @Service 같은 어노테이션이 붙어있는 클래스는 자동으로 빈으로 등록됩니다.

 

2. 자바 설정 파일을 이용한 등록된 빈을 찾는다.

@Configuration (클래스 선언부) + @Bean 어노테이션이 붙은 반환하는 메서를 빈으로 읽어들입니다.

 

이렇게 등록된 Bean들을 스프링 컨테이너가 찾아올 수 있습니다!

 

 

 

 

ref. 스프링공식문서/https://m.blog.naver.com/PostView.naver?blogId=sosow0212&logNo=223073479569&referrerCode=0&searchKeyword=bean