[ASP.NET Core] 의존성 주입(Dependency Injection) 이란?

참조


의존성 주입이란?(Dependency Injection)

  • DI(Dependency Injection) 의 개념은 다음과 같습니다.
    • 의존성 주입은 의존성 역전 원칙(Dependency Inversion Principle) 을 기반으로 느슨하게 결합된 모듈들을 이용해서 응용 프로그램을 구성할 수 있는 기법입니다.
    • A라는 클래스를 만들 때, A가 의존하는 클래스들을 A로 생성하는게 아니라 그 클래스들을 A에 주입 해야 한다는 개념입니다.
    • DI는 느슨한 결합(loose coupling) 과 높은 응집(high coshesion) 을 가능하게 만들어 줍니다.

의존성 역전 원칙 이란?(DIP, Dependency Inversion Principle)

  • 앞서 DI는 의존성 역전 원칙 을 기반으로 한다고 하였습니다.
  • 의존성 역전 원칙 이란 객체는 저수준 모듈보다 고수준 모듈에 의존해야 한다 는 원칙입니다.
    • 고수준 모듈 : 인터페이스와 같은 객체의 형태나 추상적 개념
    • 저수준 모듈 : 실제로 구현되는 객체
  • 고/저수준 모델의 정의는 위와 같습니다.
  • 위 정의를 의존성 역전 원칙에 대입하면, 객체는 객체보다 인터페이스에 의존해야 한다 로 치환할 수 있습니다.
  • 즉, 가급적 객체의 상속은 인터페이스를 통해 이루어져야 한다는 의미로 이해할 수 있습니다.

의존성 역전 원칙의 예제

  • 의존성 역전 원칙 을 보다 쉽게 이해할 수 있도록 다음 예시를 생각해 보았습니다.

  • 다음처럼, 사용자가 있고 사용자는 현재 Galaxy S22 스마트폰을 사용하고 있습니다.
  • 즉, 고수준 모듈인 사용자가 저수준 모듈인 Galaxy S22에 의존하는 상태입니다.
  • 하지만, 사용자는 2년 뒤 사용 중이던 Galaxy S22 가 고장나서 iPhone 로 교체하기로 결정하였습니다.
  • 그런데, 단순히 Galaxy S22를 iPhone로 바꾼다고 코드가 끝나는 것이 아닙니다.
  • 이것에 의존하고 있던 사용자의 다른 코드들도 연쇄적으로 영향을 받게 됩니다.
  • 이것은 개방-폐쇄 원칙을 위반하는 것이므로 추상화나 다형성을 통해 문제를 해결해야 합니다.
  • DIP 는 그 중에서도 추상화를 이용하여 문제를 해결합니다.

  • 여기서 스마트폰은 저수준 모듈보다는 고수준 모듈인 사용자 입장에서 만들어 지는데, 이것은 고수준 모듈이 저수준 모듈에 의존했던 상황이 역전되어 저수준 모듈이 고수준 모듈에 의존하게 된다 는 것을 의미합니다.
  • 다만, 소스 코드의 의존 은 사용자가 '스마트폰' 을 의존하지만, 런타임에서의 객체 의존 은 스마트폰이 아니라 하위 스마트폰 중의 하나를 의존하게 됩니다.
  • 따라서, 의존성 역전 원칙은 런타임에서의 의존을 역전 시키는 것이 아니라 소스 코드 단계에서의 의존 을 역전시킨다는 것을 유의해야 합니다.

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY