Dependency Injection 이란

본 블로그는 공부를 목적으로 한 정리입니다.

주제


  • Dependency Injection에 대해서 공부해보자

목차


  • Dependency Injection의 뜻
  • 부가 개념들
  • Dependency Injection의 필요성

Dependency Injection의 뜻


한국어로 의존성 주입이라고 하며, 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉입니다.

  • 여기서 의존성이란 예를 들어 서비스로 사용할 수 있는 객체입니다.
  • 클라이언트가 어떤 서비스를 사용할 것인지 지정하는 대신에
  • 클라이언트에게 무슨 서비스를 사용할 것인지 말해주는 것입니다.
  • 주입이란 의존성(서비스)을 사용하려는 객체(클라이언트)로 전달하는 것을 의미합니다.
정적인 클래스 의존관계
  • 흔히 소스코드를 보고 (e.g import 코드) 의존관계를 파악 할 수 있습니다.
  • 그러나 이 클래스 의존관계만으로는 실제 어떤 객체가 interface에 주입 될지 알 수 없습니다.
동적인 클래스 의존관계
  • 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계입니다.
  • 애플리케이션 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결되는 것을 의존성 주입이라 합니다.

의존성 주입을 사용해 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있습니다.

부가 개념들


  • IoC - 제어의 역전 (Inversion of Control)
    • 자바에서 AppConfig 클래스를 이용해 DI를 구현할 경우, 구현 객체는 자신의 로직을 실행하는 역할만 하고, AppConfig가 프로그램의 제어 흐름을 구현합니다.
    • 이처럼 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부(AppConfig와 같은)에서 관리하는 것을 제어의 역전(IoC)라고 합니다.
  • SRP - 단일 책임 원칙 (Single Responsibility Principle)
    • 한 클래스는 하나의 책임만 가져야 한다.
  • OCP - 개방-폐쇄 원칙 (Open/Closed Principle)
    • 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
  • DIP - 의존관계 역전 원칙 (Dependency inversion principle)
    • 추상화에 의존해야지, 구체화에 의존하면 안된다.
    • 의존성 주입은 이 원칙을 따르는 방법 중 하나입니다.

출처


https://ko.wikipedia.org/wiki/%EC%9D%98%EC%A1%B4%EC%84%B1_%EC%A3%BC%EC%9E%85 https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84)