Dependency injection (DI) is a process whereby objects define their dependencies, that is, the other objects they work with, only through constructor arguments, arguments to a factory method, or properties that are set on the object instance after it is constructed or returned from a factory method.
위 내용은 공식 홈페이지에서 설명하고 있는 DI(의존성 주입)의 정의다. 해당 내용은 번역하면 다음과 같다.
"객체가 자신의 종속성을 정의하는 프로세스이다. 즉 객체들은 생성자 인자, 팩토리 인자 등 팩토리 메서드를 통해 반환된 속성을 통해서만 작업할 수 있다."
이게 도대체 무슨 말인가 싶겠지만, 하나씩 이해해보자.
Java에서 종속성이란 클래스간의 의존관계를 뜻한다.
아래 코드를 보면 A 클래스의 함수를 실행하기 위해서는 B클래스를 필요로 한다.
만약에 B 클래스에 변화가 생기면 이는 A클래스에도 영향을 미치게 되며, 이것이 바로 종속성이다.
class A {
private B b;
public A() {
this.b = new B();
}
public funcA() {
this.b.funcB();
}
}
자세한 내용을 원하신다면 여기로 (설명이 정말 잘 되어있습니다.)
https://refactoring.guru/ko/design-patterns/factory-method
팩토리 메소드는 객체를 구현하는 일종의 디자인 패턴이다.
A공장의 경우 쥬스를 만들기 위해 처음부터 다시 모든 공정을 만들어야 하지만, B공장은 재료에 대한 처리만 해주면 바로 쥬스를 만들 수 있다.
B공장의 경우가 바로 팩토리 패턴을 사용하였기에, 변화에 열려있고 확장이 가능하다.
"객체가 자신의 종속성을 정의하는 프로세스이다. 즉 객체들은 생성자 인자, 팩토리 인자 등 팩토리 메서드를 통해 반환된 속성을 통해서만 작업할 수 있다."
위 정의를 해석해보면
이제 조금 이해가 가는 것 같다. 그런데 그렇다면 우리는 이 의존성을 주입하기 위해서 복잡한 팩토리 패턴의 코드를 일일히 개발해야 하는 것일까?
우리의 복잡한 이 마음을 바로 스프링(Spring)을 사용하여 평온을 만들 수 있다.