Server/Spring

[Spring] 스프링 컨테이너와 빈

강서월 2023. 10. 6. 18:07

스프링 컨테이너란?

1. 자바 객체의 생명주기를 관리하고

2. 생성된 자바 객체에게 부가 기능을 제공한다.

 

스프링에서는 자바 객체를 '빈(Bean)'이라고 부른다.

 

즉, 스프링 컨테이너는 스프링 빈의 생명주기를 관리하고, 생성된 스프링 빈에게 부가 기능을 제공한다. 

 

스프링 컨테이너는 ApplicationContext라고도 부른다.

좀 더 상세하게는 스프링 컨테이너는 ApplicationContext가 상속하고 있는 인터페이스 'BeanFactory'와 구분해서 사용하지만, BeanFactory를 직접 사용하는 경우는 거의 없어 일반적으로 ApplicationContext를 스프링 컨테이너라고 한다. 

BeanFactory는 스프링 컨테이너의 최상위 인터페이스다. 

1. BeanFactory는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트이다. 

2. getBean() 메서드를 통해 빈을 인스턴스화 할 수 있다.

3. @Bean 어노테이션이 붙은 메서드의 이름을 스프링 빈의 이름으로 사용하여 빈 등록을 한다.

 

ApplicationContext는 BeanFactory와 무엇이 다를까?

 

ApplicationContext가 상속하고 있는 것은 BeanFactory뿐만이 아니다.

위의 코드의 같이 BeanFactory 뿐만 아니라 다양한 기능의 인터페이스들을 상속받아 사용하고 있다.

이러한 인터페이스들은 환경 변수 설정, 메시지 국제화 기능, 이벤트 발생, 리소스 조회 등 다양한 기능들을 지원한다.

 

즉, ApplicationContext는 빈의 생명주기를 관리하고, 부가적인 기능을 제공한다. 

 

스프링 컨테이너는 싱글톤 컨테이너이다.

스프링 컨테이너는 스프링 빈들을 싱글톤 패턴으로 관리한다.

 

싱글톤 패턴은 특정 클래스의 인스턴스가 단 하나만 생성되도록 보장하는 디자인 패턴이다.

이를 통해 하나의 객체를 생성해두고 요청이 돌아올 때마다 객체를 공유하는 방법으로 메모리 낭비를 최소화 할 수 있다.

 

이렇게 싱글톤으로 빈을 생성 및 관리하는 기능을 '싱글톤 레지스트리'라고 부르며,

이러한 기능을 스프링 컨테이너는 가지고 있기 때문에 싱글톤 컨테이너이다.