Tech Log

[Design Pattern] 의존성 주입(Dependency Injection) 본문

Design Pattern

[Design Pattern] 의존성 주입(Dependency Injection)

yuhee kim 2023. 3. 29. 14:00

1. 의존성

종속성이라고도 한다.

B의 변경 사항에 대해 A 또한 변해야 한다면, A가 B에 의존성이 있다는 것이다.

B가 바뀌면 A도 바뀌는 것이다.

2. 의존성 주입

출처 : 면접을 위한 CS 전공지식 노트(2022)

위 그림처럼 메인 모듈이 직접 하위 모듈에 대한 의존성을 주는 것이 의존성 주입을 적용하지 않는 것이다.

의존성 주입을 적용한다면, 메인 모듈이 직접 의존성을 주는 것이 아니라 간접적으로 주게 된다.

중간에 의존성 주입자(dependency injector)가 의존성 주는 부분을 가로채서 메인 모듈 대신 의존성을 주입하게 된다.

그 결과 메인 모듈과 하위 모듈은 디커플링 되었다.

*디커플링(decoupling) : 모듈 간 의존성을 최소화

 

의존성 주입 시에는 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다.

또한 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.

추상화는 세부 사항에 의존하지 않아야 한다.

 

3. 장점

의존성 주입을 적용하게 되면 다음과 같은 다양한 장점들이 있다.

  • 모듈들을 쉽게 교체할 수 있게 된다.
  • 테스팅하기 쉬워진다.
  • 마이그레이션이 쉬워진다.
  • 의존성 방향이 일관되어 애플리케이션을 쉽게 추론할 수 있게 된다(구현 시 추상화 레이어를 넣고 이를 기반으로 구현체를 넣기 때문)
  • 모듈 간의 관계들이 명확해진다.

 

4. 단점

반면 다음과 같은 단점을 만들어내기도 한다.

  • 모듈이 더욱 분리되어 복잡성이 증가한다.
  • 복잡성으로 인한 런타임 페널티가 생긴다.

 

 

참조
  • 주홍철, 면접을 위한 CS 전공지식 노트, 길벗(2022)

'Design Pattern' 카테고리의 다른 글

[Design Pattern] Observer Pattern  (0) 2023.03.31
[Design Pattern] Repository Pattern  (0) 2023.03.30
[Architecture Pattern] MVP 패턴  (0) 2022.09.04
[Architecture Pattern] MVVM 패턴  (0) 2022.08.30
[Architecture Pattern] MVC 패턴  (2) 2022.08.30
Comments