IoC(Inversion of Control)
객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 뜻이다.
IoC 컨테이너
※컨테이너 - 보통 객체의 생명주기를 관리하고, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 한다.
스프링 프레임워크의 객체를 생성하고 관리하고 책임지고 의존성까지 관리해주는 컨테이너이다.
의존성이란?
객체 세계에서 협력은 필수이다. 객체가 서로 협력한다는 것은 객체간의 의존성이 존재한다라는 것이다.
파라미터나 리턴값 또는 지역변수 등으로 다른 객체를 참조하는 것
인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신해줍니다.
그로 인해 객체관리 주체가 프레임워크(Container)가 되기 때문에 개발자가 로직에 집중할 수 있다.
- IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.
- POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
※ POJO란
특정 자바 모델이나 기능, 프레임워크를 따르지 않는 Java Object를 지칭한다.
이는 Java Bean 객체가 대표적이다.(Getter, Setter) - 객체 생성 코드가 없으므로 TDD가 용이하다
Spring Container의 종류
컨테이너가 관리하는 객체를 빈(Bean)이라고 하고, 이를 관리한다는 의미로 빈 팩토리라고 부른다.
- 객체의 생성과 객체 사이의 런타임 관계를 DI 관점에서 볼 때 컨테이너를 BeanFactory라고 한다.
※ DI에 대한 글 - BeanFactory에 여러 가지 컨테이너 기능을 추가한 애플리케이션콘텍스트(ApplicationContext)가 있다.
BeanFactory와 ApplicationContext
- BeanFactory
- beanFactory 계열의 인터페이스만 구현한 클래스는 단순히 컨테이너에서 객체를 생성하고 DI를 처리하는 기능만 제공한다.
- Bean을 등록, 생성, 조회, 반환, 관리한다.
- 팩토리 디자인 패턴을 구현한 것으로 BeanFactory는 빈을 생성하고 분배하는 책임을 지는 클래스이다.
- Bean을 조회할 수 있는 getBean() 메서드가 정의되어 있다.
- 보통은 BeanFactory를 바로 사용하지 않고, 이를 확장한 ApplicationContext를 사용한다.
- ApplicationContext
- Bean을 등록, 생성, 조회, 반환, 관리한다
- 스프링의 각종 부가 기능을 추가로 제공한다.
- BeanFactory에서 보다 더 추가적인 기능
- 국제화가 지원되는 텍스트 메시지를 관리해 준다.
- 이미지 같은 파일 자원을 로드할 수 있는 포괄적인 방법을 제공해 준다.
- 리스너로 등록된 빈에게 이벤트 발생을 알려준다.
'Spring' 카테고리의 다른 글
Bean (0) | 2023.03.22 |
---|---|
DI(Dependency Injection) feat. @Autowired (0) | 2023.03.22 |
Spring Security - Exception (0) | 2023.03.22 |
인증(Authentication) 과 인가(Authorization) (0) | 2023.03.22 |
DAO 와 DTO(VO) 는 뭘까? (0) | 2023.03.22 |