본문 바로가기

Programming/Framework

DAY 146. Spring IOC(Inversion of Control)

 

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 파일 형태로 만들 수 있다.