sanichdaniel의 iOS 개발 블로그
Service Locator vs DI 본문
Property Wrapper을 이용하여 DI를 작업하다가, Property Wrapper을 이용한 DI는 DI가 아니라 Service Locator 패턴이라는 글을 읽어서 Service Locator 패턴이 무엇인지 궁금해졌다.
DI와 Service Locator 모두 IoC 구현 방법중 하나이다.
Inversion of Control 원리는 말 그대로 제어 흐름을 반대로 한다는 뜻이다.
Dependency Injection
타겟 객체는 외부에서 의존성을 주입받는다.
장점
1. 유닛 테스트 하기 수월하다. 외부에서 mock으로 갈아끼워서 넣어주면 된다
2. 생성자만 보고 어떤 의존성이 있는지 알 수 있다.
Service Locator
Service Locator는 앱에서 사용되는 모든 의존성에 대해 알고있다. DI 컨테이너가 Service Locator가 역할을 할 수 있다
타겟 객체는 locator(container, register ...)에게 의존성을 요청한다.
class TargetObject {
private let repository: TodosRepository
init(locator: ServiceLocator) {
self.repository = locator.resolve(TodosRepository.self)
}
}
단점
locator가 의존성을 가져와주지만, locator 자체에 의존하게 된다.
기존에는 생성자만 보고 모든 의존성을 알 수 있었으나, 이젠 불가능해졌다.
또한 해당 클래스에서 locator에게 요청을 하는 형태이니, 외부에서 mock, stub 객체를 갈아끼워 넣어주는게 불가능해졌다
출처
medium.com/mobile-app-development-publication/dependency-injection-and-service-locator-4dbe4559a3ba
'dependency injection' 카테고리의 다른 글
Pure DI (1) | 2020.10.04 |
---|---|
Dagger를 참고한 프로퍼티 래퍼를 이용한 DI (0) | 2020.10.04 |
Dagger2 알아보기 (0) | 2020.10.04 |
DI 컨테이너 장단점 (0) | 2020.10.02 |