IoC 구현의 핵심 기술. 사용하는 객체를 직접 생성하여 만드는 것이 아니라 컨테이너가 빈의 설정 정보를 읽어와 자동으로 해당 객체에 연결하는 것을 말한다.
이렇게 의존성을 주입 받게 되면 이후 해당 객체를 수정해야 할 상황이 발생했을 때 소스 코드의 수정을 최소화 할 수 있다.
1. 장점
- 개발자가 작성해야 할 코드가 단순해진다.
- 각 객체 간의 종속 관계(결합도)를 해소할 수 있다. ( 인터페이스 이용하여 코드 수정 최소화 )
2. 객체 간의 종속관계(결합도) ⭐⭐⭐
- 한 클래스에서 필드 객체를 생성할 때 발생하는 두 객체 간의 관계를 말하며, 각 객체 간의 내용이 수정될 경우 영향을 미치는 정도를 나타낸다.
- 예를 들어 A Class에서 B Class를 생성했을 때, 만약 B Class의 생성자의 매개변수가 변경되거나 제공하는 메소드가 변경될 경우 이를 사용하는 A Class의 일부 정보도 필히 수정해야 하는 상황이 발생한다.
→ 이를 '두 객체간 종속관계(결합도)가 강하다' 라고 표현한다.
3. DI 의 종류
- Setter 메소드를 통한 의존성 주입
의존성을 주입받는 Setter 메소드를 만들고, 이를 통해 의존성을 주입
→ 주입하려는 클래스 객체에 Setter 메소드가 있어야 한다.(main() 메소드에서 toString() 출력으로 확인 가능)
- 생성자를 통한 의존성 주입
필요한 의존성을 포함하는 클래스에 생성자를 만들고, 이를 통해 의존성을 주입
- 메소드를 통한 의존성 주입
의존성을 입력 받는 일반 메소드를 만들고 이를 통해 의존성을 주입