728x90
IoC와 스프링 컨테이너
IoC란?
- Inversion of Control의 줄임말이며,제어의 역전이라고도 한다
- 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다
- 스프링 애플리케이션에서는 오브젝트(빈)의 생성과 의존 관계 설정, 사용,제거 등의 작업을 애플리케이션 코드 대신, 스프링 컨테이너가 담당한다
- 이를 스프링 컨테이너가 개발자 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다
- 따라서 스프링 컨테이너를 IoC 컨테이너라고도 부른다
IoC의 장점
- IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리해준다
- 때문에 개발자는 비즈니스 로직에 집중할 수 있다
- 또한 POJO의 생성,초기화,서비스,소멸에 대한 권한을 가진다
- 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다
- 객체 생성코드가 없으므로 TDD가 용이하다
IoC 컨테이너
컨테이너는 보통 객체의 생명주기를 관리하고 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것
- 스프링 프레임워크도 객체를 생성하고 관리하고 책임지며 의존성을 관리해주는 컨테이너가 있는데 그것이 IoC컨테이너(=스프링 컨테이너) 이다
스프링 컨테이너
한번더 정리하자면, 스프링은 스프링 컨테이너를 통해 객체를 관리한다.
스프링 컨테이너에서 관리되는 객체를 Bean이라고 하고, 이 Bean들을 관리한다는 의미로 컨테이너를 BeanFactory 라고 부른다
- 객체의 생성과 객체 사이의 런타임 관계를 DI 관점에서 볼 때 컨테이너를 BeanFactory 라고 한다
- BeanFactory에 여러가지 컨테이너 기능을 추가한 ApplicationContext가 있다
스프링 컨테이너의 기능 제공 및 사용 이유는?
- 자바를 배울때 객체로써 사용하기 위해서는 new 생성자가 필요했다.
- 이렇게 하게 되면, 객체 지향 프로그래밍이라는 자바가 좋은 객체지향 프로그래밍 원칙을 지키지 못하게 된다
- 객체가 많이 존재하게 됨에 따라 서로 어지럽게 참조가 되어있을 것이기 때문이다 - 이때 참조가 심하면, 서로에 대한 의존성이 높다는 것이다. 그러면 좋은 객체 설계 지향원칙에 따라 DIP에 위반디 된다
- 좋은 객체 지향 설계원칙을 따르고, 객체간의 의존성을 낮추기 위해 스프링 컨테이너가 사용된다
- 즉 좋은 객체 지향을 설계하고, 객체간의 의존성을 낮추기 위해 스프링 컨테이너를 사용한다
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스이다.
- Bean을 등록,생성,조회,반환 관리를 한다
- 팩토리 디자인 패턴을 구현한 것으로 BeanFactory는 Bean을 생성하고 분배하는 책임을 지는 클래스이다
- BeanFactory 계열의 인터페이스만 구현한 클래스는 단순히 컨테이너에서 객체를 생성하고 DI를 처리하는 기능만 제공한다
- 보통은 BeanFactory를 바로 사용하지 않고, 이를 확장한 ApplicationContext를 사용한다
ApplicationContext
- Bean을 등록,생성,조회,반환 관리 하는 기능은 BeanFactory와 같다
- BeanFactory를 상속한 인터페이스로 BeanFactory의 기능외에 추가적으로 AOP와 같이 대규모 웹 프로젝트에 필요한 여러 확장기능들을 포함하고 있다
- 스프링의 각종 부가 기능을 추가로 제공해 준다
- BeanFactory 보다 추가적으로 제공하는 기능
- 국제화가 지원되는 텍스트 메시지를 관리해준다
- 이미지같은 파일 자원을 로드할 수 있는 포괄적인 방법을 제공해준다
- listener로 등록된 Bean에게 이벤트 발생을 알려준다
- 따라서 대부분의 어플리케이션에서는 BeanFactory보다는 ApplicationContext를 사용하는 것이 더 좋다
'Spring' 카테고리의 다른 글
서블릿과 서블릿 컨테이너 (0) | 2023.03.07 |
---|---|
웹서버와 웹 애플리케이션 서버(WAS) (0) | 2023.03.07 |
스프링 의존성 주입(Dependency Injection, DI) (0) | 2023.02.25 |
스프링 프레임워크(Spring Framework) (0) | 2023.02.24 |
프레임워크란? (feat.라이브러리) (0) | 2023.02.24 |