의존성: 객체가 다른 객체를 사용하고 있는 관계
→ 의존성 주입: 관계를 설정해주는 것
public class Product {
private Apple apple;
public Product() {
this.apple = new Apple();
}
}
이렇게 예시를 작성해놓고 볼 때 Product라는 클래스가 Apple 생성자를 사용하는 경우 따로 주입 받지 않고 그대로 사용하고 있다.
Product를 사용할 경우, Apple이 그대로 딸려나오는 종속적인 관계로 이해할 수 있다. 이렇게 되면 객체끼리의 연결이 아닌 클래스 간의 관계라고 볼 수 있다.
또한 내가 Orange
라는 클래스를 추가적으로 사용하고 싶다면 Product 클래스 생성자에 변화를 직접 줘야 하는 상황이고 이는 유연성이 떨어진다고 볼 수 있다.
결론적으로 의존성 주입이 필요한 이유를 짚어보자면
클래스 간의 강한 결합력 + 코드의 유연성이 떨어짐
이런 문제를 의존성 주입으로 해결할 수 있기 때문에 필요하다고 할 수 있겠다!
public interface Fruit {
}
public class Apple implements Fruit {
}
public class Product {
private Fruit fruit;
public Product(Fruit fruit) {
this.fruit = fruit;
}
}
각각의 클래스가 독립성을 보장 받고 있는 것을 확인할 수 있겠다.