Swift:
의존성 주입(Dependency Injection, DI)은 객체가 직접 의존성을 생성하지 않고, 외부에서 전달받아 사용하는 디자인 패턴
DI가 왜 필요할까?
- 결합도 감소 (Low Coupling)
- 클래스 내부에서 직접 의존 객체를 생성하지 않으므로, 모듈 간의 결합도가 낮아짐
- 유지보수 용이
- 구현체가 바뀌어도 외부에서 주입만 해주면 되므로 코드 변경 범위가 줄어듬
- 테스트 용이성 (Testability)
- 테스트 환경에서 의존 객체를 Mock 또는 Stub으로 쉽게 대체 가능
DI 방식
방식 | 설명 | 예시 |
---|---|---|
생성자 주입 (Constructor Injection) | 생성자를 통해 주입 | init(service: ServiceProtocol) |
프로퍼티 주입 (Property Injection) | 프로퍼티를 통해 주입 | var service: ServiceProtocol? |
메서드 주입 (Method Injection) | 메서드 호출 시 주입 | func configure(service: ServiceProtocol) |
장점
- 코드 재사용성 증가
- 테스트 가능성 증가 (Mock 주입 가능)
- SOLID 원칙 중 DIP(Dependency Inversion Principle) 준수
- 유연한 구조 설계 가능
단점
- 설정 및 초기화 코드 증가
- 구조가 복잡해질 수 있음
- 의존성이 많을 경우 주입 과정이 번거로울 수 있음