SPRING/토비의 스프링

[토비의 스프링] 스프링 IoC 파해치기 - 빈, 빈 팩토리, 애플리케이션 컨텍스트

개발하는 정복자 2022. 7. 20. 15:47

 

 

[세트] 토비의 스프링 3.1 (총2권) - YES24

『토비의 스프링 3.1』은 스프링을 처음 접하거나 스프링을 경험했지만 스프링이 어렵게 느껴지는 개발자부터 스프링을 활용한 아키텍처를 설계하고 프레임워크를 개발하려고 하는 아키텍트에

www.yes24.com


IoC 공부 전 꼭 알아야하는 팩토리

이 포스트를 쉽게 이해하려면 위 포스트를 보고 오시는걸 추천합니다‼️


  🌱스프링 IoC 관련 필수 용어 정리  

 

  빈(bean)   🫘 

스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트.

 

  빈 팩토리(bean factory)  🏭

빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트.
보통은 빈 팩토리보다 이를 확장한 애플리케이션 컨텍스트를 주로 사용한다.

 

  애플리케이션 컨텍스트(application context)  

IoC 방식을 따라 만들어진 일종의 빈 팩토리이다. 

 

👉🏾 빈 팩토리 vs 애플리케이션 컨텍스트

빈 팩토리를 말할 때는 빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 둔것이고, 애플리케이션 컨텍스트를 말할 때는 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진이라는 의미가 부각된다. 


 

📮 어플리케이션 컨텍스트

 

별도의 정보를 참고해서 빈(오브젝트)의 생성, 관계설정 등의 제어 작업을 총괄한다.

 

👉🏾 빈 팩토리와의 관계 

애플리케이션 컨텍스트는 ApplicationContext라는 인터페이스를 구현하는데, ApplicationContext는 빈 팩토리가 구현하는 BeanFactory 인터페이스를 상속했다. 그래서 애플리케이션 컨택스트는 일종의 빈 팩토리인 셈이다.

 

👉🏾 동작방식

전 시간 봤던 AFactory 오브젝트처럼 직접 오브젝트를 생성하고 관계를 맺어주는 코드 대신, 그런 생성정보와 연관관계 정보를 별도의 설정정보를 통해 얻는다.

 

✅ 스프링 컨텍스트를 사용하는 이유

전 시간 AFactory 오브젝트에서 IoC를 적용했었다. 그런데 굳이 애플리케이션 컨텍스트를 사용하는 이유는 무엇일까?

 

1. 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다

- 오브젝트 팩토리가 아무리 많아져도 이를 알아야 하거나 직접 사용할 필요가 없다. 
- 일관된 방식으로 원하는 오브젝트를 가져올 수 있다.
- 단순한 방법으로 애플리케이션 컨텍스트가 사용할 설정정보를 만들 수 있다.

 

2. 종합 IoC 서비스를 제공해준다

단순 오브젝트 생성과 관계설정만 하진 않는다.
오브젝트가 만들어지는 방식, 시점과 전략을 다르게 가져가거나 이에 부가적인 자동생성,
오브젝트에 대한 후처리 등 다양한 기능을 제공한다.

 

3. 빈을 검색하는 다양한 방법을 제공한다

애플리케이션 컨텍스트의 getBean() 메소드는 빈의 이름을 이용해 빈을 찾아준다.
타입만으로 빈을 검색하거나 특별한 애노테이션 설정이 되어 있는 빈을 찾을 수도 있다.