디자인 패턴이란?
프로그램 설계 시 발생했던 문제점이 존재
→ 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 규약으로 만듦
싱글톤 패턴
- 하나의 클래스 = 하나의 인스턴스
- 클래스 당 여러 개의 개별 인스턴스를 만들 수 있지만 그렇게 하지 않고 하나만 사용
- 보통 DB 모듈에 많이 사용
- 생산성 ↑, 의존성 ↓
싱글톤 패턴의 단점
- TDD(Test Driven Development: 테스트 주도 개발) 시 단위 테스트를 진행 시 Issue 발생 가능성
의존성이 높은 싱글톤 패턴 특성상 각 테스트마다 독립적인 인스턴스를 만들기가 어려움
의존성 주입
- 싱글톤 패턴의 모듈간 결합을 강하게 만드는 단점을 해결하기 위한 방법
- 메인 모듈이 직접 다른 하위 모듈에 의존성을 주는 것 대신 의존성 주입자를 통해 간접적으로 의존성을 주입 (디커플링)
장점
모듈을 쉽게 교체할 수 있는 구조, Testing & Migration이 수월함, 의존성 방향의 일관성, Application 추론이 쉬워짐, 관계의 명확성 등등
단점
모듈이 더욱 분리 → 클래스 수의 증가로 복잡성 증대, 런타임 페널티
의존성 주입의 원칙
- 상위 모듈은 하위 모듈에서 어떤 것도 가져오지 않음
- 둘 다 추상화에 의존해야 함 + 추상화가 세부 사항에 의존하지 않음