Swift

[Design Pattern] Facade Pattern 이란?

insub4067 2023. 8. 15. 11:59

하나의 시스템이 여러개의 서브 시스템을 갖고 있는 형태로 서브 시스템 간의 결합을 최소화한다.
다른 말로는 고수준의 인터페이스가 저수준의 인터페이스를 갖고 있는 형태로 저수준의 인터페이스는 서로를 모르게 된다.

 

클린 아키택쳐에서 추구하는 형태가 이런건가하는 궁금증이 생긴다.

ViewModel -> UseCases 를 갖고 있고

UseCase -> Repositories 를 갖고 있다.

 

레이어를 지날수록 저수준을 서로를 모름과 동시에 본인이 담기는 고수준의 인터페이스가 어딘지도 모른다.

그저 고수준의 인터페이스에서 저수준을 갖고 있다 일을 시킬뿐이다.

 

import UIKit

class A_Database {
    func getItems() -> [Int] { 
        [1,2,3]
    }
}

class B_Database {
    func getItems() -> [Int] { 
        [4,5,6]
    }
}

class Facade {
    
    private let db_A: A_Database
    private let db_B: B_Database
    
    init(db_A: A_Database, db_B: B_Database) {
        self.db_A = db_A
        self.db_B = db_B
    }
    
    func getAllItems() -> [Int] {
        let db_A_items = db_A.getItems()
        let db_B_items = db_B.getItems()
        
        return db_A_items + db_B_items
    }    
}


let dataManager = Facade(
    db_A: .init(), 
    db_B: .init()
)
let result = dataManager.getAllItems()
print(result) // [1, 2, 3, 4, 5, 6]