= 의존성 주입
Dependency : 클래스가 작동하기 위해 필요한 다른 객체
Dependency Injection : 의존성이 클래스로 주입하는 것. 클래스 내에서 의존성 객체를 생성하는 것과 대조된다
// DI하는 경우
Class Example1 {
private Database db;
public Example1(Database db) {
this.db = db;
}
}
Class Injector {
Database db = new MySQL();
Example1 ex1 = new Example1(db);
}
// DI하지 않는 경우
Class Example2 {
private Database db = new MySQL();
}
Class Host {
Example2 ex2 = new Example2();
}
Dependency Inversion Principle
높은 수준의 객체들은 낮은 수준의 객체에 의존하면 안된다. 낮은 수준의 객체에 의존하면 객체 수정 시 높은 수준의 객체 코드까지도 수정해야하기 때문
따라서 코드는 추상체에 의존해야한다. 추상체에 의존하게 하므로서 구현을 분리 시킬 수 있다
위 예시의 경우 인젝터에서 MySQL 객체를 PostgreSQL 객체로 바꾼다고 해도, Example1의 코드 수정 없이 작동할 수 있다. 클라이언트가 어떤 서비스를 사용하지 고르지 않고 인젝터가 어떤 서비스를 사용할지 정하기 때문