[Spring] DI

ETC/기술면접 / / 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() { ... }
    ...
}

'ETC > 기술면접' 카테고리의 다른 글

[Oracle] SYNONYM  (0) 2021.06.13
[Oracle] INDEX  (0) 2021.06.13
[Spring] IOC  (0) 2021.06.13
[Spring] AOP  (0) 2021.06.10
Intro...  (0) 2021.06.10