티스토리 뷰

퍼사드 패턴이란?

  • 서브 시스템을 감싸고 단순한 인터페이스를 제공, 복잡한 시스템 구조를 단순화하는 패턴
  • 건물의 정면(Facade)을 의미
  • 다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체
  • 간편한 메소드 제공

간단히 말하면 특정 행동을 위해 필요한 여러 서브 클래스들의 기능을 퍼사드라는 클래스로 단순화해서 쉽게 사용할 수 있게 한 것

서브 클래스들의 많은 기능을 다 가져오는 것이 아니라 퍼사드 클래스의 목적 수행을 위해 필요한 기능들만 가져와서 단순화함

 

퍼사드 패턴의 구성요소

퍼사드 클래스

  • 서브 시스템들을 단순화하는 역할을 함
  • 클라이언트는 서브시스템들과 직접 소통하는 것이 아니라 퍼사드 클래스만 사용함 -> 클라이언트는 서브시스템의 내부 구조를 알 필요가 없음

서브시스템 클래스

  • 퍼사드 클래스에 의해 단순화되는 복잡한 기능과 구조를 갖고 있는 클래스

 

퍼사드 패턴 예제

빌딩 관리인이 아침에 출근을 했다고 가정해 보자

잠겨 있는 빌딩의 모든 문을 열고, 전기를 켜고, 등등의 일을 해야 한다

빌딩의 문을 열기 위해서는 건물의 문을 관리하는 시스템의 한 기능을 사용하고, 빌딩의 전기를 켜기 위해서는 전기관리 시스템의 한 기능을 사용해야 한다

매번 각 시스템의 일부 기능들을 따로따로 사용해야 하기 때문에 불편하다

서브시스템 클래스

// 건물 문을 관리하는 클래스
class DoorSystem {
    func lockAllDoor() {
        // 모든 문을 잠급니다
    }
    
    func unlockAllDoor() {
        // 모든 문을 엽니다
    }
    
    /*
     A구역 문만 잠그는 메서드,
     A구역 문만 여는 메서드,
     출입금지구역을 봉쇄하는 메서드,
     등등...
     */
}

// 건물의 전기를 관리하는 클래스
class ElectricitySystem {
    func TurnOnTheElectricity() {
        // 모든 전기를 켭니다
    }
    
    func TurnOffTheElectricity() {
        // 모든 전기를 끕니다
    }
    
    /*
     전기 상황을 체크하는 메서드,
     전기 사용량을 알려주는 메서드
     등등...
     */
}

 

퍼사드 패턴을 사용해서 매일 출근했을 때, 그리고 퇴근했을 때 일어나는 반복되는 일들을 단순화해 보자

퍼사드 클래스

// 건물을 관리하기 위한 클래스(Facade)
class BuildingFacade {
    private let doorSystem = DoorSystem()
    private let electricitySystem = ElectricitySystem()
    
    // 아침에 첫 출근할 때 사용하는 메서드
    func openingBuilding() {
        doorSystem.unlockAllDoor()
        electricitySystem.TurnOnTheElectricity()
    }
    
    // 퇴근할 때 사용하는 메서드
    func closeBuilding() {
        doorSystem.lockAllDoor()
        electricitySystem.TurnOffTheElectricity()
    }
}

빌딩을 관리하는 퍼사드 클래스를 통해서 건물을 열고 닫을 때 쉽게 사용할 수 있는 메서드를 만들었다

다양하고 복잡한 기능들을 가진 서브시스템들인 문 관리 시스템과 전기 관리 시스템을 모두 알지 않아도 되고,

빌딩퍼사드 클래스 하나로 간단히 특정 목적을 해결할 수 있다

 

 

 

 

댓글