본문 바로가기
아이폰 개발/디자인 패턴

swift 디자인패턴 - Facade Pattern

by 인생여희 2021. 8. 21.

swift 디자인패턴 - Facade Pattern

 

퍼사드 패턴의 키워드는 단순한 접근이다. 복잡한 서브시스템을 단순한 하나의 시스템인 퍼사드 클래스를 이용해서 간단하게 접근하게 한다는 개념이다.

 

 

 

  •  Facade
    • 어떤 Subsystem 클래스가 클라이언트의 요청에 응답해야 하는지 알고 있습니다.
    • 클라이언트의 요청을 적절한 Subsystem에게 전달합니다.
  • Subsystem
    • Subsystem 기능을 구현합니다.
    • Facade 객체에서 전달받은 요청을 처리합니다.
    • 서브 시스템 클래스들은 Facade 객체의 존재를 모릅니다.
  • Client
    • 클라이언트는 서브 시스템 객체를 직접 호출하는 대신 Facade를 사용합니다.

 

import Foundation

/// 서브 시스템 1
class Subsystem1 {
    
    func operation1() -> String {
        return "subSystem1: ready! \n"
    }
    func operationN() -> String {
        return "subSystem1: Go! \n"
    }
}

/// 서브 시스템 2
class Subsystem2 {
    func operation2() -> String {
        return "subSystem2: ready! \n"
    }
    func operationZ() -> String {
        return "subSystem2: Fire! \n"
    }
}

/// 특정 클래스의 동작을 한번에 또는 순차적으로 실행시켜주는 클래스
class Facade {
    private var subsystem1: Subsystem1
    private var subsystem2: Subsystem2
    
    init(subsystem1: Subsystem1 = Subsystem1() ,
         subsystem2: Subsystem2 = Subsystem2()) {
        self.subsystem1 = subsystem1
        self.subsystem2 = subsystem2
    }
    
    func operation() -> String {
        var result = " 퍼사드 초기화 시스템 작동 : \n"
        result += " " + subsystem1.operation1()
        result += " " + subsystem2.operation2()
        
        result += "\n" + " 퍼사드 하위 시스템 순서대로 작동 시작 : \n"
        
        result += " " + subsystem1.operationN()
        result += " " + subsystem2.operationZ()

        return result
    }
}

/// 퍼사드 객체에 서브시스템 1, 2의 객체를 참조시켜서 한번에 실행시키도록 한다.
let facade = Facade(subsystem1: Subsystem1(), subsystem2: Subsystem2())
print(facade.operation())


/*
 퍼사드 초기화 시스템 작동 : 
 subSystem1: ready! 
 subSystem2: ready! 

 퍼사드 하위 시스템 순서대로 작동 시작 : 
 subSystem1: Go! 
 subSystem2: Fire! 


*/

 

 

참고

https://github.com/jaicoco/Swift_Design_Pattern_Study

https://icksw.tistory.com/246