Interface Injection

작성일

protocol Networking {
    func fetchData()
}
class UserNetworkManager: Networking {
    func fetchData() {
        print("user data fetched")
    }
}

class PostNetworkManager: Networking {
    func fetchData() {
        print("post data fetched")
    }
}

Networking 프로토콜을 따르는 객체는 fetchData()를 구현해야한다.
이렇게 각각 구현하지말고,

class MainViewController {
    let networkManager: Networking
    
    init(networkManaer: Networking) {
        self.networkManager = networkManaer
    }
}

인터페이스로 정의한 뒤, 주입을 받을 수 있다. 총 정리하면

protocol Service {
    func setNetworkManager(networkManager: Networking)
}

class MainViewController: Service {
    var networkManager: Networking?
    
    func setNetworkManager(networkManager: Networking) {
        self.networkManager = networkManager
    }
}

이런식으로 작성이 가능하다.