-
[Spring Core] 공식문서 공부 - 1.1 Introduction to the spring IoC Container and BeansJAVA/Spring 2022. 8. 20. 17:41
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#spring-core
Core Technologies
In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly where the autowired bean definitions are declared is still somewhat ambiguous. For example, as a developer looking at ServiceConfig, how do
docs.spring.io
이번 글에서는 스프링 프레임워크 Inversion of Control(제어의 역전)의 원리에 대해서 다룬다.
공식문서에서 Bean이 무엇인지 설명하기 전에 이 단어를 사용해서 순서를 바꾸어 보았다.
Bean이란 무엇인가?
Spring IoC 컨테이너에 의해 인스턴스화 되고, 조립 되며, 관리되는 객체를 Bean이라 부른다.
사실상 우리가 만드는 어플리케이션 내에 대부분 객체들이 Bean에 해당한다.다음으로, 공식문서에서 "IoC는 DI(dependency Injection)으로 잘 알려져 있다."라는 표현을 쓰면서 DI에 대해 먼저 소개하였다.
Dependency Injection(DI)의 정의
DI(의존성 주입)이란,
객체들이 그들의 의존성(같이 사용되는 다른 객체들)을 아래의 요소들을 통해서만 정의하는 프로세스를 의미한다.
1. 생성자 인수들(constructor arguments)
2. 팩토리 메서드로의 인수들(arguments to a factory method) - 팩토리 메서드 패턴 참고
3. 팩토리 메서드로 부터 생성되거나 리턴된 후의 객체 인스턴스에 있는 프로퍼티들 (properties that are set on the object instance after it is constructed or returned from a factory method)IoC 컨테이너가 Bean을 생성할 때 위의 설명한 방법대로 의존성을 주입한다.
왜 IoC(Inversion of Control)라고 부르는가?
Bean이 인스턴스화와 의존성(dependency)의 위치를 컨트롤 하기 위해 직접 클래스를 생성하거나 Service Locator 패턴을 사용하는 이 과정이 근본적으로 역전(제어의 역전, Inversion of Control)되어 있기 때문이다.
org.springframework.beans 와 org.springframework.context 패키지는 Spring 프레임워크의 IoC 컨테이너에 기반을 두고 있으며, 위 패키지들에 속한 대표적인 인터페이스들에는 BeanFactory 와 ApplicationContext 가 있다. 이 인터페이스 들은 다양한 타입의 객체를 다룰 수 있는 설정(configuration) 매커니즘을 제공한다.
ApplicationContext는 BeanFactory의 서브 인터페이스로 아래와 같은 특징이 추가되었다.
- Spring의 AOP 특징들과의 쉬운 통합
- 메세지 자원 관리
- 이벤트 배포
- 어플리케이션-계층의 특정 문맥 (e. g. 웹 어플리케이션에서 사용하는 WebApplicationContext)
정리하자면, BeanFactory는 기본 기능들에 집중되어있고, ApplicationContext는 여기에다가 기업에 특화된 기능들이 더 추가된 느낌이다.
ApplicationContext 는 공식 문서상에서 Spring IoC 컨테이너를 설명하는데 자주 사용된다고 한다.
'JAVA > Spring' 카테고리의 다른 글
[Spring Core] 공식문서 공부 - 1.2.2 Instantiating a Container (0) 2022.08.21 [Spring Core] 공식문서 공부 - 1.2.1 Configuration Metadata (0) 2022.08.21 [Spring Core] 공식문서 공부 - 1.2 Container Overview (1) 2022.08.21 [Spring Core] 공식문서 공부 - 1. The IoC Container (0) 2022.08.20 [Spring] 공식문서 공부 - Overview (0) 2022.08.20