실전 개발자를 위한 Spring Framework Day5
DI(Dependency Injection)
1. DI의 개념
- 각 클래스 간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
- 개발자는 빈 설정 파일에 의존관계에 필요한 정보를 추가하기만 하면 된다
- 객체 레퍼런스를 컨테이너로부터 주입 받아, 실행 시 동적으로 의존관계가 생성됨
- 컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입하는 것
DI의 장점
- 코드가 단순해진다
- 컴포넌트 간의 결합도가 제거된다(결합도는 낮을 수록 좋다)
DI의 유형
- Setter Injection - 의존성을 입력 받는 setter 메서드를 만들고 이를 통해 의존성을 주입
- Constructor Injection - 필요한 의존성을 포함하는 클래스의 생성자를 만들고 이를 통해 의존성을 주입
- Method Injection 의존성을 입력 받는 일반 메서드를 만들고 이를 통해 의존성을 주입
Spring DI 컨테이너
- Spring DI 컨테이너가 관리하는 객체를 빈(bean)이라고 하고, 이 빈(bean)들을 관리한다는 의미로 컨테이너를 빈 팩토리(Bean Factory)라고 한다
- 객체의 생성과 객체 사이의 런타임 관계를 DI 관점에서 볼 때는 컨테이너를 Bean Factory라고 한다
- Bean Factory에 여러가지 컨테이너 기능을 추가하여 애플리케어션 컨텍스트(Application Context)라고 한다
Bean Factory
- Bean을 관리함(등록, 생성, 조회, 반환)
- 보통은 Bean Factory를 바로 사용하지 않고, 이를 확장한 Application Context를 사용한다
- getBean()메서드가 정의되어 있음
Application Context
- Bean을 관리하는 기능은 Bean Facroty와 동일
- Spring의 각종 부가 서비스를 제공함
- Spring이 여러 종류의 Application Context 구현 클래스를 제공