객체의 생성과 관리를 개발자가 직접 제어하는 것이 아닌!
외부 컨테이너나 프레임워크(ex. Spring) 에 의해 제어되도록 하는 것을 의미
즉, 주변 시스템이나 라이브러리를 호출하는 것이 아닌, 프레임워크(or 컨테이너)가 주체가 되어 사용자의 코드를 호출하는 구조를 말한다.
다시 말해 개발자가 제어를 하지 않고 프레임워크에 제어를 맡기는 의미가 된다.
장점
DI는 IoC의 한 형태로, 객체가 필요하는 의존성을 외부에서 주입하는 것을 의미한다.
이게 무슨말이냐?
코드 예시를 통해 살펴보자!
Person.java
public class Person {
private String name;
public Person(String name){
this.name = name;
}
public void buyPhone(Phone phone){
System.out.println(name + "님이 " + phone.getBrand() + "을 샀습니다." );
turnOnPhone(phone);
}
public void turnOnPhone(Phone phone){
System.out.println(name + "님이 " + phone.getBrand() + "을 켰습니다.");
phone.turnOnMessage();
}
}
위 코드에서 Person class 는 특정 폰 브랜드에 의존하지 않게 되어 있다.
buyPhone
method를 통해서 어떤 브랜드의 폰이든지 받아들일 수 있기 때문!
⇒ Main
클래스에서 samsung 폰과 apple 폰을 person 객체에 주입한다.
장점
ㅗ