DI란 (Dependency Injection)
Object Dependencies(객체 의존성)
현재 객체가 다른 객체와 상호작용(참조)하고 있다면 현재 객체는 다른 객체에 의존성을 가진다.
public class PetOwner{
private AnimalType animal;
public PetOwner() {
this.animal = new Dog();
}
}
https://gmlwjd9405.github.io/2018/11/09/dependency-injection.html
- 이 접근법의 문제점
두 객체간의 긴밀한 결합이 생기고 따라서 한 객체를 변경하면 다른 객체로 변경된다.
즉, 하나의 모듈이 바뀌면 의존한 다른 모듈까지 변경되어야 한다.
Dependency Injection(의존성 주입)
객체가 아니라 프레임워크에 의해 객체의 의존성을 주입하게 되는 패턴
- 프레임워크간에 동적으로 주입되므로 여러 객체간의 결합이 줄어든다.
- DI는 스프링에서 지원하는 IoC의 형태
Bean Container 가 Bean 객체를 생성하고 종속성 주입을 수행한다.
DI 와 IoC 는 같은 의미로 사용된다.
IoC는 DI를 통해 달성된다.
IoC(제어의 역전) : 프로그램의 제어권을 프레임워크가 가져가는것
개발자가 모든 제어의 중심이지만 코드 전체에 대한 제어는 프레임워크가 대신 처리해준다 개발자가 설정을 하면 Container 가 처리해주는 개념
의존성 주입 방법
- Contructor Injection
생성자를 통한 전달
- Method(Setter) Injection
setter()를 통한 전달
- Field Injection
멤버 변수를 통한 전달
장점
-
종속성 감소
-
재사용성 증가
-
더 많은 테스트 코드 작성 가능
-
코드를 읽기 쉬워짐
Spring Container
스프링의 핵심 컴포넌트
Container 은 DI 를 사용하여 응용 프로그램을 구성하는 Bean 객체를 관리한다.
역할
bean 을 포함하고 관리하는 책임이 있음.
- 객체를 생성하고
- 객체를 묶고
- 객체를 구성하고
- 객체의 라이프 사이클을 관리
설정 방법
- XML
- Annotations
- Code
출처 : https://gmlwjd9405.github.io/2018/11/09/dependency-injection.html