DevBoi

[Spring] DI란? 본문

Develop/[Spring]

[Spring] DI란?

HiSmith 2022. 2. 21. 16:52
반응형

DI : 의존성 주입, 종속성 주입 

 

 

해당 케이스에서는 B는 A의 부품이라고 얘기를 한다.(B는 A에 종속된다.)

해당 DI작업은 부품을 injection하는 작업이 번거롭다는 단점이 있다.(하지만 이 Injection 작업은 스프링이 해준다. 별도 간단하게 명시만 하면 스프링이 알아서 결과물을 알려준다.)

 

 

DI를 하는이유)

 

 

Store에서 pencil을 정의 하여, 사용한다.

만약에 Store에서 pencil이 아니라 지우개나 다른 상품을 사고싶다고 하면?

그렇게 되는 경우, pencil을 바꿔야한다.

Store의 변경은, 해당 판매 상품을 바꾸고자 할때마다 발생하게 된다.

이러한 경우를 유연성이 떨어지고, 결합도가 높은 관계를 가진다고 이해하면된다.

 

이러한 문제를 해결하기 위해서는 다형성이라는 개념으로 접근해야한다.

 

이런식으로 한다면 유연성이 증가하고, 추가로 다른 상품을 팔고싶은 경우에도 product를 impl하는 다른 객체를 만들어 버리면 그만이다.

스프링의 DI 컨테이너가 필요한 이유는 바로 이것이다.

스프링이 구동될때 필요한 빈들을 생성해야하고, 두 객체를 연결하기 위해 한 객체를 다른 객체로 주입 시켜야 하기 때문이다.

이러한 경우에 Store에서 필요한 Pencil 빈을 생성하여, Store에 주입해주는 것을 Di 컨테이너가 하고 

개발자는 수동으로 받는 빈을 사용하기만 하면 된다.

 

어떤 객체를 사용할지에 대한 책임은 BeanFactory(스프링에서는 ApplicationContext)에 넘어갔고, 이것을 제어의 역전이라는 개념으로 스프링에서는 강력하게 지원하고 있다.

 

반응형