
의존성이 높을 경우, 아래와 같은 문제가 있다.
의존성 주입을 해주면 아래와 같은 이점이 생긴다.
가장 쉬운 의존성 주입 예를 봐보자, 아래와 같이 ViewController 클래스가 있다고 가정해보자. 그리고 requestManager 변수를 세팅하는 방법이 두가지가 있다.
class ViewController:UIViewController {
var requestManager:RequestManager?
}
ViewController가 직접 변수를 생성하도록 하는 방법이 있다.// ViewController 클래스 내부에서
class ViewController:UIViewController {
var requestManager:RequestManager?=RequestManager()
}
class ViewController:UIViewController {
var requestManager:RequestManager?
}
let viewController=ViewController()
viewController.requestManager=RequestManager()
Swift에서는 의존성 주입을 위한 인터페이스로 protocol을 사용한다.
Amphibia(양서류)가 하위 계층인 Frog에 의존을 한다.class Amphibia {
var example = Frog()
}
class Frog {
var name = "개구리"
}
Animal이라는 protocol을 만들어 의존성을 역전시켜주는 것이다. (하위계층과 상위 계층 둘 다 인터페이스-Protocol에 의존을 하는 것)protocol Animal {
var name: String { get set }
func move()
}
class Amphibia {
var example: Animal
init(example: Animal){
self.example = example
}
}
class Frog: Animal {
var name = "개구리"
func move() {
print("나는 움직일수 있어")
}
}
let frog = Frog()
// 객체를 주입한다!
let amphibia = Amphibia(example:frog)
iOS 의존성 주입(Dependency Injection)
(By. Mason Kim)