객체가 직접 의존하는 객체를 생성하는 것이 아니라 외부에서 주입받는 방식
객체 간의 결합도를 낮추고, 유연한 코드 구조를 만들기 위해 사용하는 설계 패턴
public class Car {
private Engine engine = new Engine();
public void start() {
engine.run();
}
}
new Engine()) 하고 있음(직접 의존)public class Car {
private Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
public void start() {
engine.run();
}
}
public class Car {
private Engine engine;
public void setEngine(Engine engine) {
this.engine = engine;
}
public void start() {
engine.run();
}
}
public class Car {
@Autowired
private Engine engine;
public void start() {
engine.run();
}
}
@Autowired 설정으로 Spring이 자동으로 주입+DI 컨테이너(Dependency Injection Container)
ApplicationContext가 DI 컨테이너 역할을 한다(@Autowired, @Component 등을 활용@Component와 @Autowired를 활용해서 DI를 쉽게 구현할 수 있다