Spring IOC (Inversion of Control)
프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등의 관리를 프로그램을 개발하는 사람이 아닌 프로그램을 구동하는 컨테이너에 직접 관리하는 것
스프링은 IoC 구조를 통해 구동 시 필요한 객체의 생성부터 생명주기까지 해당 객체에 대한 관리를 직접 수행한다.
- 기존 웹 애플리케이션
개발자가 소스코드를 통해서 객체 생성, 객체 소멸 등 직접 코드로 작성 했었다.
- 스프링 프레임워크
개발자는 소스코드만 작성하고
객체 생성, 객체 소멸, 라이프 소멸은 프레임 워크(컨테이너)에서 제어한다.
why?
-> 객체 간의 결합도를 낮추기 위함이다.
IoC 컨테이너
- 스프링에서 관리하는 객체를 Bean(빈) 이라고 한다.
- 빈들을 관리하는 의미로 컨테이너를 Bean Factory라고 한다.
- 최상위에 BeanFactory가 있다. = Bean을 관리하는 컨테이너
- BeanFactory에 여러 가지 기능을 추가하여 기능을 확장한 것이 ApplicationContext 이다.
(따라서, 컨테이너를 ApplicationContext 라고 칭한다.)
- ApplicationContext 의 종류 중 하나가 GenericXmlApplicationContext 인데, 이 것은 xml 파일을 읽어서 그 내용을 가지고 ApplicationContext 에서 관리할 객체를 생성하고 연결하는 역할을 한다.
IoC 컨테이너의 역할 1. 객체의 생명주기와 의존성을 관리 2. VO(DTO/POJO) 객체의 생성, 초기화, 소멸 등의 처리 담당 3. 개발자 직접 객체를 생성하지 않고 권한을 컨테이너에게 넘김으로써 소스 코드 구현 시간을 단축할 수 있다. |
IoC 컨테이너와 Bean 객체
▷ Bean 빈
- 스프링이 IoC 방식으로 관리하는 Class
- 스프링이 직접 생성과 제어 담당하는 객체
▷ Bean Factory 빈 팩토리
- Bean 객체를 관리하는 객체
- Bean 등록, 생성, 조회, 반환 기능 담당
- 스프링의 IoC을 담당하는 핵심 컨테이너
▷ ApplicationContext 애플리케이션 컨텍스트
- Bean Factory를 확장한 IoC 컨테이너
- Bean 등록, 관리 기능은 Bean Factory와 동일하지만, 스프링이 제공하는 부가 서비스가 추가로 제공된다.
- 애플리케이션에서 사용하는 객체를 관리한다.
▷ GenericXmlApplicationContext
- ApplicationContext를 구현한 클래스이다.
- XML 형태의 문서를 읽어서 객체 생성과, 관계를 정의하는 컨테이너 역할을 수행한다.
▷ Configuration metadata 설정 메타 정보
- 어떤 Bean을 생성하고 어떻게 연결할 지를 개발자가 설정 정보를 만들어준 것
- ApplicationContext 또는 BeanFactory IoC를 적용하기 위해 사용하는 설정 정보이다.
- IoC 컨테이너에 의해 관리되는 Bean 객체를 생성하고 구성할 때 사용
- xml 또는 java 파일 형태로 만들 수 있다.
'Programming > Framework' 카테고리의 다른 글
DAY 148. Spring DI - Annotation (0) | 2022.01.13 |
---|---|
DAY 147. Spring DI(Dependency Injection) 의존성 주입 (0) | 2022.01.12 |
DAY 145. Spring 개요 (0) | 2022.01.10 |
DAY 141. TDD 방식으로 게시글 상세조회 기능(댓글 포함) (0) | 2022.01.06 |
DAY 140. TDD 방식으로 게시판 페이징 기능 (0) | 2022.01.05 |