[DI] Initializer로 Swift 의존성 주입하기
번역글 입니다.
[출처]
How to Do Swift Dependency Injection With Initializers
Dependency Injection feel like a very complicated topic but in fact it is very simple. We as devs all try to follow design principle like…
medium.com
의존성 주입은 어렵게 느껴질 수 있는 주제이지만 사실 매우 단순합니다. 개발자로써 SOLID와 같은 디자인 원리를 적용하여 코드가 스파게티 코드가 아닌 적절하게 모듈로 구조화되게 시도합니다. 이때 의존성 주입은 도움이 될 수 있습니다. 또한 코드를 mocking/testing 하는 데에도 도움을 줄 수 있습니다.
의존성 주입은 말 그대로 의존성을 주입하는 것 입니다. 프로그래밍 세계에서는 코드가 동작하기 위해 필요한 의존성을 주입하는 것을 의미합니다. 세가지 종류의 의존성 주입이 있습니다.
- Initializer Based
- Property Based
- Parameter Based
이번 포스팅에서는 Initializer based 인 의존성 주입의 예시를 살펴보겠습니다.
class FileUploader {
var fileManager: FileManager
var networkManager: NetworkManager
init() {
self.fileManager = FileManager()
self.networkManager = NetworkManager()
}
}
위의 예시 코드를 보면 FileUploader 초기화 인스턴스는 file manager 와 network manager에 의존하고 있습니다. 그래서 매우 coupled (결합도가 높은) 코드 입니다. 이 코드를 initializer based 인 Swift 에서 의존성 주입을 통해 좀 더 나은 코드로 만들 수 있습니다.
class FileUploader {
var fileManager: FileManager
var networkManager: NetworkManager
init(fileManager: FileManager, networkManager: NetworkManager) {
self.fileManager = fileManager
self.networkManager = networkManager
}
}
위 코드의 간단한 수정은 큰 차이점을 불러옵니다. file manager와 network manager를 FileUploader init 메서드 내에서 하드코딩하는 것이 아닌, 외부적으로 필요한(의존적인) 파라미터를 전달하는 것으로 바꿨습니다. 이 것은 기본적으로 의존성 주입이 무엇인지 설명합니다.
더 참고할 만한 글
[DI] Dependency Injection 이란?
디펜던시 인젝션, 의존성 주입에 대해 간단하게 작성해 봅니다.
medium.com