IoC ( Inversion of Control ) 제어의 역전 의 의미
객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다라는 의미이다.
이전에는 개발자가 직접 객체를 생성하고 관리해 프로그램의 제어의 흐름을 스스로 관리했다.
IoC 는 왜 필요할까?
결합도를 낮춰서, 변경에 유연한 코드를 작성할 수 있는 구조를 만들 수 있다.
스프링에서도 IoC 기능을 할 수 있는 IoC 컨테이너(=스프링컨테이너, DI컨테이너, ApplicationContext)를 제공한다.
IoC 컨테이너에서 관리되는 객체를 Bean 이라고 부른다.
객체의 생성을 책임지며, 의존성을 관리한다.
개발자들이 객체를 직접 생성할 수 있지만, 컨테이너에게 역할을 위임한다.
스프링에서의 객체 생성 및 실행되는 순서는 아래와 같다.
1. 개발자가 객체를 생성한다.
2. 의존성 객체를 주입한다. ( Bean 으로 등록한 객체를 의미하며, 이는 Ioc컨테이너에서 관리한다 )
* Baen은 싱글톤으로 관리된다
3. 의존성 객체 메서드를 호출한다.
IoC 컨테이너의 종류는 BeanFactory 와 ApplicationContext 로 나뉜다.
BeanFactory 는 빈을 관리 , 조회하는 기능을 가지며, 인터페이스이다.
ApplicationContext 는 BeanFactory 를 구현하고 있어, 추가적인 기능이 더 많아 실질적으로 사용된다.
1. 메시지 소스를 활용한 국제화기능
2. 환경변수 - 로컬 , 개발 , 운영 등을 구분해서 처리
3. 애플리케이션 이벤트관리
4. 리소스 조회
DI 는 Dependency Injection 으로, 객체를 외부로부터 주입해주는 작업이다.
클래스간의 의존관계를 빈 설정 정보 바탕으로 컨테이너가 자동으로 연결해준다.
빈 설정을 하는 방법은 아래와 같다.
https://josteady.tistory.com/742
DI 를 주입하는 방법은 아래와 같다.
https://josteady.tistory.com/726
참고
https://choicode.tistory.com/31
'Spring > Spring-detail' 카테고리의 다른 글
AOP 란 무엇인가? + 예제 (0) | 2022.10.26 |
---|---|
DI 의존성 주입 방법에 대해 알아보자 (0) | 2022.10.26 |
@Bean 과 @Component 비교 (0) | 2022.10.24 |
빈을 등록하기 위한 방법 @Configuraion, @Bean, @Component (0) | 2022.10.14 |
DispatchServlet(디스패처 서블릿) 에 대해 알아보자. (0) | 2022.10.14 |
댓글