본문 바로가기

기본 프로그래밍 지식

[기본 지식] 4. 의존성 주입(DI, Dependency Injection)

반응형

의존성 주입

  • 싱글톤 패턴은 사용하기가 쉽고 굉장히 실용적이지만 모듈 간의 결합을 강하게 만들 수  있다는 단점이 있습니다.
  • 이때 의존성 주입(DI, Dependency Injection)을 통해 모듈 간의 결합을 조금 더 느슨하게 만들어 해결할 수 있습니다. 
  • 의존성이란 종속성이라고도 하며 A가 B에 의존성이 있다는 것은 B의 변경 사항에 대해 A 또한 변해야 된다는 것을 의미합니다. 
  • 앞의 그림처러 메인 모듈(main module)이 '직접' 다른 하위 모듈에 대한 의존성을 주기보다는 중간에 의존성 주입자(dependency injector)가 이 부분을 가로채 메인 모듈이 '간접'적으로 의존성을 주입하는 방식입니다. 
  • 이를 통해 메인 모듈(상위 모듈)은 하위 모듈에 대한 의존성이 떨어지게 됩니다.
  • 참고로 이를 '디커플링이 된다'고도 합니다. 

의존성 주입의 장점

  1. 모듈들을 쉽게 교체할 수 있는 구조가 되어 테스팅하기 쉽고 마이그레이션하기도 수월합니다. 
  2. 구현할 때 추상화 레이어를 넣고 이를 기반으로 구현체를 넣어 주기 때문에 애플리케이션 의존성 방향이 일관되고, 애플리케이션을 쉽게 추론할 수 있으며, 모듈 간의 관계들이 조금 더 명확해집니다. 

의존성 주입의 단점

  1. 모듈들이 더욱 더 분리되므로 클래스 수가 늘어나 복잡성이 증가될 수 있으며 약간의 런타임 페널티가 생기기도 합니다. 

의존성 주입 원칙

  • 아래 두가지 의존성 원칙을 지켜주면서 만들어야 합니다.
    • 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 합니다.
    • 상위 모듈, 하위 모듈 둘 다 추상화에 의존해야 하며, 이때 추상화는 세부 사항에 의존하지 말아야 합니다. 

 

 

참고자료

  •  면접을 위한 CS 전공지식 노트 - 주홍철
반응형