Updated:

1. 개요

서브시스템의 인터페이스 집합에 대한 하나의 상위 수준 인터페이스를 정의하는 패턴

퍼사드 패턴(Facade Pattern)은 구조 패턴(Structural Pattern)의 한 종류로, 서브시스템들의 공통적인 기능을 정의하는 단순화된 상위 수준의 인터페이스를 정의하는 패턴이다. 서브시스템들 사이의 종속성을 줄일 수 있다.

2. 구조 패턴(Structural Pattern)

2-1. 구조 패턴이란?

구조 패턴이란 작은 클래스들의 상속과 합성을 통해 더 큰 클래스를 생성하는 방법을 제공하는 패턴으로, 독립적으로 개발한 클래스들을 마치 하나인 것 처럼 사용할 수 있다.

2-2. 구조 패턴 종류

3. 구성

[출처 : GoF의 디자인 패턴]

  • Facade : 사용자의 요청을 서브시스템 객체에 전달하는 단순하고 일관된 통합 인터페이스

  • Subsystem Classes : Facade에 대한 정보를 가지지 않고, 서브시스템의 기능을 구현하는 클래스

4. 예제 코드

우리가 아침에 일어나서 사무실에 출근하기까지를 여러 과정으로 나눠볼 수 있다. 예를들어 씻고, 아침을 먹고, 대중교통을 타서 출근을 하는데, Facade Pattern을 이용하여 각각의 동작들을 서브클래스로 구현하고, 서브클래스들의 공통 기능을 정의하는 상위 수준의 인터페이스를 정의할 수 있다.

4-1. Facade

[GoOffice.java]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class GoOffice {

    public void goToWork() {
        Wash wash = new Wash();
        Breakfast breakfast = new Breakfast();
        Move move = new Move();

        wash.brushTeeth();
        wash.shower();
        breakfast.eat();
        breakfast.water();
        move.bus();
    }
}

4-2. Subsystem Classes

[Wash.java]

1
2
3
4
5
6
7
8
9
10
public class Wash {

    public void brushTeeth() {
        System.out.println("Brush my teeth");
    }

    public void shower() {
        System.out.println("Take a shower");
    }
}

[Breakfast.java]

1
2
3
4
5
6
7
8
9
10
public class Breakfast {

    public void eat() {
        System.out.println("Have breakfast");
    }

    public void water() {
        System.out.println("Drink water");
    }
}

[Move.java]

1
2
3
4
5
6
public class Move {

    public void bus() {
        System.out.println("Take the bus");
    }
}

5. 테스트

[Clinet.java]

1
2
3
4
5
6
7
public class Client {

    public static void main(String[] args) {
        GoOffice goOffice = new GoOffice();
        goOffice.goToWork();
    }
}

[실행 결과]

6. 특징

  • 낮은 결합도 : 클라이언트가 서브시스템의 코드를 모르더라도 Facade 클래스를 통해 사용 가능

  • 서브 클래스 직접 접근 가능 : Facade 클래스를 통해 서브클래스를 사용할지, 서브클래스를 직접 사용할지 선택 가능

Updated:

Leave a comment