상세 컨텐츠

본문 제목

[Design Pattern] Facade Pattern

JAVA

by jeonghojin 2023. 4. 6. 22:27

본문

Facade Pattern

서브시스템의 인터페이스 집합에 대한 하나의 상위 수준 인터페이스를 정의하는 패턴
퍼사드 패턴(Facade Pattern)의 목적은 복잡한 서브시스템을 인터페이스로 감싸서 사용하기 쉽게 만드는것이다.
퍼사드 패턴(Facade Pattern)은 구조 패턴(Structure Pattern)의 한 종류로, 서브 시스템들의 공통적인 기능을 정의하는 단순화된 산위 수준의 인터페이스를 정의하는 패턴이다. 서브시스템들 사이의 종속성을 줄일 수 있다.

출처 : GoF의 디자인 패턴
  • Facade : 사용자의 요청을 서브시스템 객체에 전달하는 단순하고 일관된 통합 인터페이스
  • SubSystem Classes : Facade 에 대한 정보를 가지지 않고, 서브시스템의 기능을 구현하는 클래스
구조패턴(Structural Pattern)
구조 패턴이란 작은 클래스들의 상속과 합성을 통해 더 큰 클래스를 생성하는 방법을 제공하는 패턴으로, 독립적으로 개발한 클래스들을 마치 하나인 것처럼 사용할 수 있다.

퍼사드(Facade Pattern) 예시

출처 : https://wildeveloperetrain.tistory.com/99

다양한 서브 시스템이 함께 이용되는 시스템에서 Facade Class 는 이 서브 시스템들을 추상화할 수 있다.
Client는 서브시스템의 존재를 모르고 오직 Facade Class 만 알고 있으며 퍼사드 클래스만 접근할 수 있다. 이렇게 하면 클라이언트는 서브시스템으로 분리되어 서브세스템에 의존하지 않아도 된다.
 

public class Wash {

    public Wash() {}

    public void startWash() {
        System.out.println("Start Washing");
    }
}
public class SpanDry {

    public SpanDry() {}

    public void startDry() {
        System.out.println("Start Drying");
    }
}
public class Rinse {
    public Rinse() {}

    public void startRinse() {
        System.out.println("Start Rinsing");
    }
}
public class Washer {

    private final Wash wash;
    private final Rinse rinse;
    private final SpanDry spanDry;

    public Washer() {
        this.wash = new Wash();
        this.rinse = new Rinse();
        this.spanDry = new SpanDry();
    }

    public void start() {
        wash.startWash();
        rinse.startRinse();
        spanDry.startDry();
    }
}
public class Main {

    public static void main(String[] args) {

        Washer washer = new Washer();
        washer.start();
    }
}

Facade Pattern 장/단점

장점 :

  • 복잡한 하위 시스템에서 코드를 별도로 분리할 수 있다.
  • 낮은 결합도 : 클라이언트가 서브시스템의 코드를 모르더라도 Facade 클래스를 통해 사용 가능
  • 서브 클래스 직접 접근 가능 : Facade 클래스를 통해 서브 클래스를 사용할지, 서브클래스를 직접 사용할지 선택 가능

단점 : 

  • 퍼사드는 앱의 모든 클래스에 결합된 전지전능한 객체가 될 수 있다.

  • 참고 :
더보기

관련글 더보기