-
의존성 주입의 필요성
public class Car { }
public class Racing { private Car car; public Racing(){ this.car = new Car(); } }
-
Car와 Racing 클래스가 강하게 결합되어 있다.
IF) Car가 아닌 Bike가 Racing에 참여한다면? ⇒ 유연성이 떨어진다!
-
객체가 아니라 클래스 사이에 관계가 맺어져 있다.
Racing에 참여할 Vehicle에 대한 관심이 분리되지 않았기 때문! ⇒ 어떠한 객체를 사용할지에 대한 책임을 넘겨버리자! (IoC)
-
-
해결 방안
// 다형성을 위한 인터페이스 구현 public interface Vehicle { }
public class Car implements Vehicle { }
public class Racing { private Vehicle vehicle; public Racing(Vehicle vehicle){ this.vehicle = vehicle; } }
// DI Container에서 Car car = new Car(); // Bean 생성 Racing racing = new Racing(car); // 의존성 주입
-
의존성 주입(DI) 이란?
- 객체 사이의 관계를 외부에서 결정
- 인터페이스를 통해 클래스 간의 의존성을 없애고 어플리케이션 실행 시점에 객체를 연결
- 클래스가 하나 이상의 자원에 의존하고, 사용하는 자원이 클래스 동작에 영향을 준다면 DI를 사용하는 것이 유리!
-
DI의 장단점
- 장점: 유연성, 재사용성, 테스트 용이성
- 단점: 코드의 가독성을 저해할 수 있다. ⇒ Spring 같은 DI Framework 사용하면 해결!
-
참고