ETC/기술면접
[Spring] DI
Raadian
2021. 6. 11. 16:20
1. 명칭
Dependency Injection의 약자로 우리말로 '의존성 주입'이라고 한다.
2. 정의
Java에서는 레퍼런스 변수를 선언하여 인스턴스를 생성하고자 할 때, new 생성자를 통한 코드로 작성했었다.
public class Hyundai { ... } // 레퍼런스 클래스
public class ShowCar { // 호출 클래스
private Hyundai hyundaiCar = new Hyundai(); // 레퍼런스 변수 선언 및 인스턴스 생성
hyundaiCar.i30N() { ... } // 인스턴스 접근
...
}
다만, 이렇게 결합도가 높은 방식으로 구현되는 경우 레퍼런스 클래스의 변동사항이 있을 때 이를 호출하는데에 있어서 연쇄적으로 얽혀 일일이 수정을 해야하는 일이 생긴다.
즉, 이러한 생산성 문제를 해결한 것이 의존성 주입으로 내부가 아닌 외부에서 객체를 생성하는 방식으로 결합도를 줄여 불필요한 코드수정을 방지할 수 있다.
public class Hyundai { ... } // 레퍼런스 클래스
public class ShowCar { // 호출 클래스
private Hyundai hyundaiCar;
public ShowCar (Hyundai hyundaiCar) { // 생성자 메소드를 통해 의존성 주입을 한다
this.hyundaiCar = hyundaiCar;
}
hyundaiCar.i30N() { ... }
...
}
또한, Spring 프레임워크에서는 @Autowired 어노테이션으로 DI 기능이 지원된다.
public class Hyundai { ... } // 레퍼런스 클래스
public class ShowCar { // 호출 클래스
@Autowired // 해당 어노테이션을 통해 생성자 메소드 작성을 생략할 수 있다.
private Hyundai hyundaiCar;
hyundaiCar.i30N() { ... }
...
}