[디자인 패턴][구조 패턴] 퍼사드 패턴(Facade Pattern)
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 클래스를 통해 서브클래스를 사용할지, 서브클래스를 직접 사용할지 선택 가능
Leave a comment