Geon

SOLID - DIP 본문

OOP

SOLID - DIP

jgkim1008 2022. 3. 27. 17:10

Dependency Inversion Principle (의존성 역전)

상위 수준의 모듈은 하위수준의 모듈에 의존해서는 안된다.
구체적인 사항은 추상화에 의존해야 한다.

왜 하위수준의 모듈에 의존하면 안될까??

하위수준의 모듈 즉 구체타입은 변화가 많지만 상위모듈인 추상타입은 잘 안변한다.
그래서 DIP를 적용하여 수정시 다른 코드에 영향을 최소화 시킬수 있다.
 
 

protocol Networkable {
    mutating func runDataTask<T: Decodable>(request: URLRequest, completionHandler: @escaping (Result<T,Error>) -> Void)
}

final class NetworkManager {
    private var networkable: Networkable

    init(networkable: Networkable = NetworkModule()) {
        self.networkable = networkable // 의존성 주입
    }

}

struct NetworkModule: Networkable {
    // 실제 네트워크 통신 로직
}

struct NetworkTestModule: Networkable {
    // 테스트 로직
}

 
 

NetworkManager의 networkable은 Networkable이라는 프토토콜에 의존하고 있다.
Networkable을 채택한 다른 타입으로 갈아 끼울수도 있어 테스트에 용이할수 있다고 볼수있다.

'OOP' 카테고리의 다른 글

SOLID - ISP  (0) 2022.03.27
SOLID - OCP  (0) 2022.03.25
SOLID - SRP  (0) 2022.03.25
SOLID 원칙  (0) 2022.03.25