[기본기] 6-3. BeanFactory VS ApplicationContext

khyojun·2022년 9월 28일
0
post-thumbnail

본 게시글은 김영한님의 스프링 핵심 원리 기본편을 정리한 글입니다.


📌BeanFactory VS ApplicationContext

이전에 정리하면서 BeanFactory와 ApplicationContext는 둘 다 스프링 컨테이너라고 할 수 있다고 하였는데 실질적으로 공부하면서 작성한 예제코드들은 거의 ApplicationContext만 사용을 하였었다. 그래서 이번 글에서는 이 두 친구의 차이점이 무엇인지에 대해서 한 번 정리해보고자 한다.

BeanFactory

BeanFactory라는 것은 찾아보면 스프링 컨테이너의 최상위 인터페이스이다. 그 말은? 컨테이너에 있는 대부분의 것들은 다 상속을 받아왔다. 대빵?(비유가 맞나?) 이라 보면 될까?
그래서 결국 우리가 이때까지 많이 사용하던 getBeans는 결국 이 대빵이 제공하던 기능이었던 거다.

ApplicationContext

BeanFactory의 기능들을 상속받아 사용을 하게 되는 스프링 컨테이너이다.
근데 그러면 당연히 BeanFactory보다 더 부가적인 기능들이 이 친구에게는 들어있을 거다.

그러면 둘의 차이는 뭘까?

위 그림처럼 ApplicationContext와 BeanFactory사이에서는 다음과 같은 부가기능들이 있다. 하나씩 살펴보자면

MessageSource: 메시지소스를 통한 국제화 기능 -> 내가 한국에서 들어오면 한국어로 보여줌.
영어권에서 들어오게 되면 영어로 보여줌
EnvironmentCapable: 로컬, 개발, 운영등을 구분해서 처리하는 것
ApplicationEventPublisher: 이벤트를 발행하고 구독하는 모델을 편리하게 지원
ResourceLoader: 파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회

이게 보면 어찌보면 내가 개발을하거나 하는 입장에서 보면 ApplicationContext를 당연히 사용하는 것이 여러가지 이점이 있다고 생각을 한다. 그치만 그래도 BeanFactory로부터 이렇게 내려와서 여러가지 기능들이 부가적으로 합쳐진 것이 ApplicationContext라고 생각을 하면 되게 좋을 거 같다.
그리고 생각을 해보자면 빌드를 하거나 할 때 BeanFactory보다 당연히 ApplicationContext를 하게 되면 불러오게 되는 것이 많으므로 시간도 당연히 더 걸릴 것이라는 것도 유추해 볼 수 있는 것 같다. 그치만 그래도 이 부가기능들이 한 번 쓰고 버리는 기능들도 아니고 여러가지 의미에서 아주 유익하게 사용할 수 있는 편리한 기능들을 제공하기에 되도록이면 ApplicationContext를 사용하는것이 좋을 것 같다.

출처

  1. 김영한님의 스프링 핵심 원리 기본편(https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8)
profile
코드를 씹고 뜯고 맛보고 즐기는 것을 지향하는 개발자가 되고 싶습니다

0개의 댓글