728x90
번역글 입니다.
[출처]
의존성 주입은 어렵게 느껴질 수 있는 주제이지만 사실 매우 단순합니다. 개발자로써 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 메서드 내에서 하드코딩하는 것이 아닌, 외부적으로 필요한(의존적인) 파라미터를 전달하는 것으로 바꿨습니다. 이 것은 기본적으로 의존성 주입이 무엇인지 설명합니다.
더 참고할 만한 글
728x90
'Swift' 카테고리의 다른 글
Swift where syntax (0) | 2020.10.27 |
---|---|
Swift High Order Function Summary (0) | 2020.10.06 |
ARC - Automatic Reference Counting (0) | 2020.08.24 |
Swift: 프로퍼티와 메서드 (0) | 2020.07.13 |
Swift: 구조체 vs 클래스 (0) | 2020.07.13 |
댓글