기록공간

DI(Dependency Injection) 본문

BackEnd/Spring

DI(Dependency Injection)

입코딩 2020. 12. 21. 22:19
반응형

Dependency 는 의존 객체를 말한다.
Injection 은 주입을 의미한다.

객체 A 가 사용되기 위해 B 객체가 반드시 필요하다고 가정하면, A 객체 입장에서 B 객체는 의존 객체가 된다.

클래스 A 가 다음과 같은 상황이고,

public class A 
{ 
    private B b; 

    public A() 
    { 
        b = new B(); 
    } 
} 

 

『A a = new A();』 라는 문장을 통해 A 객체 생성을 하는 과정이 있다면, 의존 객체인 B 객체 생성 과정은 여기에 없는 상황이 된다. A 객체 내부 생성자에 의존 객체인 B 객체 생성 과정이 포함되어 있는 것이다.

이는 의존성이 강한 결합에 속하기 때문에 사용자가 B 객체를 바꾸고 싶어도, A 클래스 내부 소스 코드를 바꾸지 않고는 다른 객체로 변경할 수 없는 상황이 된다.

 

즉, 배터리 일체형 디바이스와 같은 상황이 되어버린다고 할 수 있다.

이를 다음과 같이 수정한다면,

B b = new B(); 
A a = new A(b); 

 

의존 객체인 B 객체에 대한 생성 권한이 사용자에게 주어진다. B 객체를 별도로 생성하고 A 객체에 전달해 주는 것이다.

필요할 경우 B 객체 대신 다른 객체로 변경도 가능하다. 이 때, B 객체를 의존 객체(Dependency)라고 하고,
A 객체에 전달해 주는 과정을 주입(Injection)이라고 한다.

배터리 교체가 가능한 디바이스 모델과 같다고 할 수 있다.

스프링은 환경 설정 파일인 XML 파일을 통해서 소스 코드 변경 없이 객체 생성 과정과 객체 간의 의존 관계(DI)를 설정, 조정, 변경할 수 있다.

 DI 설정은 ① 생성자를 이용하는 방법과, ② setter 를 이용하는 방법
   두 가지가 있다. 일반적으로 setter 메소드를 이용한 DI 방법을 사용하게 된다.
   스프링에서는 XML 환경 설정 파일에서 객체 생성 및 DI 설정을 한다.
   cf) Annotation 을 활용하는 방법.

※ IoC(Inversion of Control)
   DI 패턴을 적용하게 되면 객체 생성 과정 및 의존성 주입은 일반적인 객체 생성과는 다른 방식으로 진행된다.
   작은 부품 객체인 C 를 만들고 그 부품 객체인 C 를 중간 부품 객체인 B 에 주입(Injection)하고,
   중간 부품 객체인 B(C가 탑재된 B)를 이용해서 최종 완제품인 A 객체에 주입(Injection)하게 되면
   객체 조립이 완성되는 구조인 것이다.
   이 과정... 또는 여기에 대한 관리... 이와 같은 업무가 처리되는 장소... 또는 해당 업무를 수행하는 주체...
   이 모두를 종합하여 IoC라고 한다.

 

반응형

'BackEnd > Spring' 카테고리의 다른 글

[Spring 에러] Log4j cannot be resolved to a type  (0) 2021.03.06
[Spring 에러] cvc-complex-type.2.3  (0) 2021.03.06
스프링의 특징과 의존성 주입  (0) 2021.02.16
AOP(Aspect Oriented Programming)  (0) 2020.12.21
Spring Framework 이해  (0) 2020.12.21
Comments