의존성 주입
- 싱글톤 패턴은 사용하기가 쉽고 굉장히 실용적이지만 모듈 간의 결합을 강하게 만들 수 있다는 단점이 있습니다.
- 이때 의존성 주입(DI, Dependency Injection)을 통해 모듈 간의 결합을 조금 더 느슨하게 만들어 해결할 수 있습니다.
- 의존성이란 종속성이라고도 하며 A가 B에 의존성이 있다는 것은 B의 변경 사항에 대해 A 또한 변해야 된다는 것을 의미합니다.
- 앞의 그림처러 메인 모듈(main module)이 '직접' 다른 하위 모듈에 대한 의존성을 주기보다는 중간에 의존성 주입자(dependency injector)가 이 부분을 가로채 메인 모듈이 '간접'적으로 의존성을 주입하는 방식입니다.
- 이를 통해 메인 모듈(상위 모듈)은 하위 모듈에 대한 의존성이 떨어지게 됩니다.
- 참고로 이를 '디커플링이 된다'고도 합니다.
의존성 주입의 장점
- 모듈들을 쉽게 교체할 수 있는 구조가 되어 테스팅하기 쉽고 마이그레이션하기도 수월합니다.
- 구현할 때 추상화 레이어를 넣고 이를 기반으로 구현체를 넣어 주기 때문에 애플리케이션 의존성 방향이 일관되고, 애플리케이션을 쉽게 추론할 수 있으며, 모듈 간의 관계들이 조금 더 명확해집니다.
의존성 주입의 단점
- 모듈들이 더욱 더 분리되므로 클래스 수가 늘어나 복잡성이 증가될 수 있으며 약간의 런타임 페널티가 생기기도 합니다.
의존성 주입 원칙
- 아래 두가지 의존성 원칙을 지켜주면서 만들어야 합니다.
- 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 합니다.
- 상위 모듈, 하위 모듈 둘 다 추상화에 의존해야 하며, 이때 추상화는 세부 사항에 의존하지 말아야 합니다.
참고자료
- 면접을 위한 CS 전공지식 노트 - 주홍철
반응형
'컴퓨터과학 > 기본 프로그래밍 지식' 카테고리의 다른 글
서버리스 컴퓨팅(Serverless Computing)이란? (0) | 2025.02.27 |
---|---|
노드(Node)란? (0) | 2025.01.08 |
[기본 지식] 디자인 패턴 - 싱글톤 패턴(Singleton Pattern) (0) | 2023.09.21 |
[기본 지식] 퀴즈 1 - 프로그래밍 기초, 인코딩, Java (0) | 2023.08.03 |
[기본 지식] HTTP 이해 (0) | 2023.08.02 |