한 객체가 다른 객체와 상호작용(참조)하고 있다면 그 객체는 다른 객체에 의존성을 가집니다.
class Aclass {
let name = "a"
}
class Bclass {
let aClass = Aclass()
}
외부에서 객체를 생성하여 넣어주는 것입니다. 클래스 생성, 함수를 통해 넣는 등 외부에서 객체를 주입해줍니다.
class Aclass {
let name = "a"
}
class Bclass {
let aClass: Aclass
init(with externalVariable: Aclass) {
self.aClass = externalVariable
}
}
let b = Bclass(with: Aclass())
단순히 객체를 주입하는 것이 아닌 의존관계 역전을 통해 의존성을 분리합니다.
상위계층이 하위계층에 의존하게 되는 상황을 반전시켜서 하위 계층의 구현으로부터 독립하게 됩니다. 결론적으로 구체적인 클래스보다 Interface(Protocol)을 통해 의존관계를 맺도록 설계해야합니다. 제어의 주체가 Interface(Protocol)에게 있습니다.
protocol DIP: AnyObject {
var name: String { get set }
}
class Aclass: DIP {
var name = "a"
}
class Bclass {
let aClass: DIP
init(with externalVariable: DIP) {
self.aClass = externalVariable
}
}
let b = Bclass(with: Aclass())