목차
의존성이란..?
- 상위 객체가 하위 객체에 의존하는 관계는 상위 객체가 하위 객체에 의존성을 띈다고 한다.
- 서로 다른 객체 사이에 의존 관계가 있다는 것(의존하는 객체가 수정되면 다른 객체도 영향을 받는다.)
final class StudentViewModel {
private var studentArray = [Student]()
func append(at student: Student) {
studentArray.append(at: student)
}
}
final class StudentViewController: UIViewController {
private let viewModel = StudentViewModel()
// 생략
@objc func addButtonDidTapped() {
let student = Student(name: "현규", age: 25)
viewModel.append(at: student)
}
}
- 만약에 Student 객체을 추가해야되는 상황에 viewModel의 append의 메소드명이나 메소드 내부의 로직이 상위 객체가 원하는 로직이 아니라 다른 로직으로 수정되는 경우에 상위 객체를 수정해야하는 일이 발생한다.
- 위와 같은 상황이 상위 객체가 하위 객체에서 의존하고 있는 것이다. (의존관계 :
StudentViewController → StudentViewModel
)
의존성 해결방법
의존성을 주입하자 ~~~
- 의존성을 해결하기 위해서 나온 개념이
DI(Dependency Injection)
이다… 의존성 주입..
- 즉, 내부에서 객체를 생성해서 가지고 있지말고 외부에서 객체를 생성해서 필요한 객체에 넣는 것
- 여기서 또 나오는 개념이
Dependency Inversion Principle(의존 관계 역전 법칙)
이다.
의존성 역전 원칙 (Dependency Inversion Principle, DIP)
- 의존성을 해결하기위해서는 위에 말했듯이 외부에서 객체를 생성해서 필요한 객체의 의존성을 주입해야했다.
- 여기서 DIP는 의존성을 주입하는 과정에서 구체 타입을 주입하는것 아닌 추상화된 타입을 주입하여 객체와 구체타입에 의존하지 않고 추상화된 객체에 의존하게하는 원칙이다..
- 즉,,,,,, Protocol로 추상화한 객체를 통해 의존성 주입을 구현하면 서로 다른 두 객체가 하나의 추상화된 프로토콜을 가리키게 되면서 의존 관계가 느슨해진다.