DI, 의존성 주입

김형준 Kim Hyeong Jun·2023년 2월 23일
0
post-thumbnail

DI(Dependency Injection)?

직역하자면 의존관계 주입 또는 의존성 주입 이라고 할 수 있다.

의존관계?

그렇다면 Dependency, 즉 의존관계란 무엇인가 하면.

토비(이일민)님은 스프링에서 의존관계를 다음과 같이 정의한다.

의존 대상 B가 변하면, 그것이 A에 영향을 미친다.

즉, B의 기능이 추가 또는 변경되거나 형식이 바뀌면 그 영향이 A에 미치는 것이다.

다양한 의존관계를 위하여...

인터페이스를 통한 추상화

의존관계를 인터페이스로 추상화하게 되면, 더 다양한 의존관계를 맺을 수 있고, 실제 구현 클래스와는 결합도가 낮아지는 효과를 기대할 수 있다.

그래서 DI가 뭔데?

한마디로 표현하자면,

의존관계를 개발자가 결정하지 않고, 외부에서 결정하고 주입하는 것이 DI 이다.

토비(이일민)님은 스프링에서는 다음의 세 가지 조건을 충족하는 작업을 의존관계 주입이라 말한다.

  • 클래스 모델이나 코드에는 런타임 시점의 의좐관계가 드러나지 않는다. 그러기 위해서는 인터페이스만 의존하고 있어야 한다.
  • 런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제 3의 존재가 결정한다.
  • 의존관계는 사용할 오브젝트에 대한 래퍼런스를 외부에서 제공(주입)해줌으로써 만들어진다.

DI 구현 방법

  1. 생성자를 이용

  2. 메서드를 이용(대표적으로 Setter 메서드)

DI 의 장점

  1. 의존성이 줄어든다.

  2. 재사용성이 높은 코드가 된다.

  3. 테스트하기 좋은 코드가 된다.

  4. 가독성이 높아진다.

추가로

요약 정리

DI 란 의존관계를 개발자가 아닌 제 3자가 결정하고 주입하는 것을 의미한다. Spring 에서는 Spring IoC Container 가 역할을 수행한다. DI 를 사용하면 클래스 간의 의존관계가 줄어들게 되고, 재사용성이 높은 코드가 된다는 장점을 얻을 수 있습니다.

Reference

의존관계 주입(Dependency Injection) 쉽게 이해하기
DI는 IoC를 사용하지 않아도 된다 by Jin-Wook Chung
Dependency Injection : 의존성 주입 - Goni DevStory - 티스토리

profile
I want be a developer🙂

0개의 댓글