⭐️ 프로토콜을 채택하고 있는 모든 타입들을 채택할 수 있게 된다.
class A {
var name = "aaa"
}
class C {
var a = A()
func printAlphabet() {
print(a.name)
}
}
*C클래스는 A클래스에 의존하고 있다. (예, A클래스의 name 프로퍼티를 age로 바꾸면 C클래스 안에 a.name도 a.age로 바꿔줘야한다)
final class WeatherService {
func fetchData(_ completion: @escaping (WeatherData?) -> Void) {
...
}
}
final class WeatherViewModel {
var data: WeatherData?
// ⭐️
**let service = WeatherService()**
func fetchWeatherData() {
service.fetchData { [weak self] data in
guard let weakSelf = self else { return }
weakSelf.data = data
}
}
}
protocol **Servicing**: AnyObject **{**
func fetchData(_ completion: @escaping (WeatherData?) -> Void)
**}**
final class WeatherService: **Servicing** {
func fetchData(_ completion: @escaping (WeatherData?) -> Void) {
...
}
}
final class WeatherViewModel: **Servicing** {
var data: WeatherData?
// ⭐️ service: WeatherService가 아니라 WeatherServicing
// ⭐️ WeatherService에는 접근 불가능
**let service: Servicing
init(service: Servicing) {
self.service = service
}**
func fetchWeatherData() {
service.fetchData { [weak self] data in
guard let weakSelf = self else { return }
weakSelf.data = data
}
}
}