의존성이 높을 경우, 아래와 같은 문제가 있다.
의존성 주입을 해주면 아래와 같은 이점이 생긴다.
가장 쉬운 의존성 주입 예를 봐보자, 아래와 같이 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)