1. IoC(Inversion of Control, 제어의 역전)
- 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 의미한다.
- 일반적으로는 개발자가 필요한 구현 객체를 직접 생성하고, 연결하고, 실행한다. 개발자가 직접 의존성을 만들기 때문에, 의존성에 대한 제어권을 가지고 있다고 볼 수 있다.
- 그러나 IoC가 일어나면, 개발자가 직접 의존성을 만드는 것이 아닌 외부에서 의존성을 주입 받게 된다. 이것을 DI(Dependency Injection)라고 한다.
//IoC 적용 전
public class UserService {
private UserRepository userRepository = new UserRepository();
}
//IoC 적용 후
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
2. DI(Dependency Injection, 의존관계 주입)
- 애플리케이션 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성하고, 이를 전달 받아 의존관계가 연결 되는 것을 의미한다.
3. Bean
- 스프링 컨테이너가 관리하는 객체를 의미한다. 컨테이너 밖에 존재하는 객체는 bean이 아니다.
4. 스프링 컨테이너(IoC container, DI container)
- 객체를 만들어 bean으로 등록해 주고, 등록한 bean들의 의존성을 관리해준다.
- 싱글톤 패턴을 따로 적용하지 않아도 객체 인스턴스를 싱글톤으로 관리한다. 컨테이너에 빈을 등록할 때 해당 객체를 유일하게 하나만 등록해서 관리하는 것이다. 따라서 같은 스프링 빈이면 모두 같은 인스턴스라고 볼 수 있다.
- ApplicationContext 인터페이스를 스프링 컨테이너라고 한다.
- ApplicationContext에 기능을 상속하는 BeanFactory도 스프링 컨테이너로 불린다.
4.1 스프링 컨테이너 생성 과정
① 스프링 컨테이너 생성
② 스프링 빈 등록
③ 스프링 빈 의존관계 설정
4.2 BeanFactory와 ApplicationContext
종류 | 설명 |
BeanFactory | - 스프링 컨테이너의 최상위 인터페이스이다. - 스프링 빈을 관리하고 조회하는 역할을 담당한다. |
ApplicationContext | - BeanFactory 기능을 모두 상속받아서 제공한다. - BeanFactory가 제공하는 기능 뿐만 아니라, 수 많은 부가기능을 제공한다. - BeanFactory를 직접 사용할 일은 거의 없고, 대부분 부가기능이 포함된 ApplicationContext를 사용한다. |
참고
- https://chanhuiseok.github.io/posts/spring-4/
- https://dev-aiden.com/spring/Spring-Container/
- 『스프링 핵심 원리 - 기본편』
'Spring' 카테고리의 다른 글
의존관계 주입 시 bean이 2개 이상일 때 해결 방법 (0) | 2021.10.11 |
---|---|
Lombok library가 제공하는 애노테이션 (0) | 2021.10.11 |
다양한 의존관계 주입 방법 (0) | 2021.10.11 |
Spring container에 bean을 등록하는 2가지 방법 (0) | 2021.10.09 |
Spring boot welcome page 설정 (0) | 2021.10.07 |