티스토리 뷰

퍼싸드 패턴이란?

내부의 서브 시스템을 감싸고, 클라이언트에게 인터페이스를 제공하여 쉽게 접근할 수 있도록 하는 패턴입니다. 
high-level 인터페이스를 정의하고 제공해 시스템을 감춰 클라이언트는 내부에 어떤 기능이 존재하는지 복잡한 것에 대해 잘 모르더라도, 해당 기능에 접근하여 사용할 수 있습니다.

퍼사드 패턴은 전략 패턴이나 팩토리 패턴과 같은 여타 다른 디자인 패턴과는 다르게 클래스 구조가 정형화 되지 않은 패턴이다. 반드시 클래스 위치는 어떻고 어떤 형식으로 위임을 해야되고 이런것이 없다. 그냥 퍼사드 클래스를 만들어 적절히 기능 집약화만 해주면 그게 디자인 패턴이 되는 것이다. (패턴이라기 보단 논리에 가깝다)

퍼싸드 패턴의 사용 방법

서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요

 

  • Main(Client): 서브 시스템에 직접 접근하는 대신 Facade를 사용
  • Facade : 사용자의 요청을 서브 시스템에 전달하는 단순하고 일관된 통합 인터페이스
  • Sub System : 독립적으로 기능이 수행되는 클래스. Facade에 대한 정보를 가지지 않는다.
Additional Facade 
퍼사드 클래스는 반드시 한개만 존재해야 한다는 규칙같은 건 없다. 연관 되지 않은 기능이 있다면 얼마든지 퍼사드 2세로 분리한다. 이 퍼사드 2세는 다른 퍼사드에서 사용할 수도 있고 클라이언트에서 직접 접근할 수도 있다.
package System;
 
class SubSystem1 { // 접근 지정자가 default 로 동일한 패키지 내에서만 접근이 가능하다.
    public SubSystem1() {
        System.out.println("Call Constructor : " + getClass().getSimpleName());
    }
 
    public void process() {
        System.out.println("Call Process : " + getClass().getSimpleName());
    }
}

// SubSystem 2,3...
package System;
 
public class Facade {
    private SubSystem1 subSystem1; // SubSystem와 동일한 패키지에 존재하기 때문에 접근이 가능
    private SubSystem2 subSystem2; 
    private SubSystem3 subSystem3;
 
    public Facade() {
        subSystem1 = new SubSystem1();
        subSystem2 = new SubSystem2();
        subSystem3 = new SubSystem3();
    }
 
    public void process() {
        subSystem1.process();
        subSystem2.process();
        subSystem3.process();
    }
}
import System.Facade;
//import System.SubSystem1;
 
class Main {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.process();
 
        /*
        접근 지정자로 인해 접근 불가
        new SubSytem1;
         */
   }
}

 


패턴 사용 시기

  • 시스템이 너무 복잡해 간단한 인터페이스를 통해 복잡한 시스템을 접근하도록 하고 싶을때
  • 시스템을 사용하고 있는 외부와 결합도가 너무 높을 때 의존성 낮추기 위할때

패턴 장점

  • 하위 시스템의 복잡성에서 코드를 분리하여, 외부에서 시스템을 사용하기 쉬워집니다.
  • 하위 시스템 간의 의존 관계가 많을 경우 이를 감소시키고 의존성을 한 곳으로 모을 수 있습니다.
  • 복잡한 코드를 감춤으로써, 클라이언트가 시스템의 코드를 모르더라도 Facade 클래스만 이해하고 사용 가능합니다.

패턴 단점

  • 퍼사드 클래스 자체가 서브시스템에 대한 의존성을 가지게 되어 의존성을 완전히는 피할 수는 없습니다.
  • 어찌되었건 추가적인 코드가 늘어나는 것이기 때문에 유지보수 측면에서 공수가 더 많이 들게 됩니다.

 

추상화 하고자하는 시스템이 얼마나 복잡한지
퍼사드 패턴을 통해서 얻게 되는 이점
추가적인 유지보수 비용을 비교해보며 결정하여야 합니다.

 

'CS > Design Pattern' 카테고리의 다른 글

옵서버 패턴 (Observer Pattern)  (0) 2024.04.18
싱글톤 패턴 (Singleton Pattern)  (0) 2024.04.18
브리지 패턴 (Bridge Pattern)  (0) 2024.04.17
컴포지트 패턴 (Composite Pattern)  (0) 2024.04.17
어댑터 패턴 (Adaptor Pattern)  (0) 2024.04.03