1. DI 의 개념
각 클래스간의 의존관계를 빈 설정 (Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말함.
- 개발자들은 단지 빈 설정파일에서 의존관계가 필요하다는 정보를 추가하면 된다.
- 객체 레퍼런스를 컨테이너로부터 주입 받아서, 실행 시에 동적으로 의존관계가 생성된다.
- 컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해주는 것이다.
빈 설정을 개발자가 XML, annotation 방식으로 설정을 하면 컨테이너가 빈의 설정 정보를 읽어서 컨테이너가 자동으로 짝짝꿍을 시켜준다. (프로필을 등록하고 프로필에 취미, 성향 등을 보고 자동으로 매칭 시켜주는...? 결혼 정보 업체같은 느낌..?)
new 를 사용해서 객체를 불러올 필요성이 없어진다?
2. DI의 장점
- 코드가 단순해진다.
- 컴포넌트 간의 결합도가 제거된다.
3. DI의 유형
1) Setter Injection (Setter 메서드를 이용한 의존성 삽입)
의존성을 입력 받는 setter 메서드를 만들고 이를 통해서 의존성을 주입한다.
2) Constructor Injection (생성자를 이용한 의존성 삽입)
필요한 의존성을 포함하는 클래스의 생성자를 만들고 이를 통해 의존성을 주입한다.
3) Method Injection (일반 메서드를 이용한 의존성 삽입)
의존성을 입력 받는 일반 메서드를 만들고 이를 통해 의존성을 주입한다.
4. Spring DI 컨테이너의 개념
Spring DI 컨테이너가 관리하는 객체를 빈(Bean) 이라고 하고, 이 빈(Bean)들을 관리하는 의미로 컨테이너를 빈 팩토리(BeanFactory) 라고 부른다.
객체의 생성과 객체 사이의 런타임(run-time) 관계를 DI 관점에서 볼 때는 컨테이너를 BeanFactory 라고 한다.
Bean Factory 에 여러 가지 컨테이너 기능을 추가하여 애플리케이션 컨텍스트(Application Context) 라고 부름.
기타
예제를 실습하는 과정 중에서 IoC 컨테이너가 스프링Bean을 싱글톤형태로 관리한다고 한다.
이 부분의 설명이 자세히 나오지 않았기에 아래 블로그에서 참고한다.
출처: https://gmlwjd9405.github.io/2018/11/10/spring-beans.html