본문 바로가기
Swift

[DI] Initializer로 Swift 의존성 주입하기

by HaningYa 2020. 9. 3.
728x90

번역글 입니다.

[출처]

 

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 하는 데에도 도움을 줄 수 있습니다.

의존성 주입은 말 그대로 의존성을 주입하는 것 입니다. 프로그래밍 세계에서는 코드가 동작하기 위해 필요한 의존성을 주입하는 것을 의미합니다. 세가지 종류의 의존성 주입이 있습니다.

  1. Initializer Based
  2. Property Based
  3. 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

 

 

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

댓글