Dependency Injection 이란 메인 모듈이 직접 다른 하위 모듈에 대한 의존성을 가지고 있기 보다는, 중간에 의존성 주입자 (dependency injector) 가 이 부분을 가로채 메인 모듈이 간접적으로 의존성을 주입하는 방식을 말한다.
이를 통해서 메인 모듈과 하위 모듈간의 의존성을 조금 더 느슨하게 만들 수 있으며 모듈을 쉽게 교체 가능한 구조로 만든다.
의존한다는 의미
A가 B에 의존한다 = B가 변하면, A도 변한다.
아래 코드의 경우, Hi는 Hello 클래스에 의존하고 있는데, 만약 Hello 클래스의 greet 에 매개변수나 다른 요소들이 추가되면, Hi 클래스도 그에 맞춰 같이 바뀌어져야한다.
package me.whiteship.designpatterns;
public class DependencyInjectionApp {
public static void main(String[] args) {
new Hi().greet();
}
}
class Hello {
public void greet() {
System.out.println("greetings from b");
}
}
class Hi {
public void greet() {
new Hello().greet();
}
}