Facade 패턴
여러 저수준 인터페이스를 하나의 고수준 인터페이스로 묶는 Facade 패턴을 컴퓨터 부팅 예제로 정리한다.
시리즈 · 디자인 패턴1 / 2
- Facade 패턴
- 생성 패턴: Abstract Factory와 Builder
Facade 패턴이란
저수준 인터페이스들을 하나의 고수준 인터페이스로 묶어 주는 패턴이다.
어떤 클래스에서 여러 저수준 인터페이스의 동작을 제어하려면 각각을 일일이 호출해야 한다. 이들을 하나의 고수준 인터페이스로 묶으면 한 번의 호출로 제어할 수 있다. 이 고수준 인터페이스를 통합 인터페이스라고 부른다.

예시
컴퓨터를 시작하려면 CPU, Memory, HardDrive 등 여러 클래스의 동작이 필요하다. 클라이언트가 이 클래스들을 하나씩 호출하는 대신 Computer 클래스의 startComputer 메서드만 호출하면 되도록 만든다. 이때 Computer가 퍼사드 클래스다.
class CPU {
public void freeze() { ... }
public void jump(long position) { ... }
public void execute() { ... }
}
class Memory {
public void load(long position, byte[] data) { ... }
}
class HardDrive {
public byte[] read(long lba, int size) { ... }
}
/* Facade */
class Computer {
public void startComputer() {
CPU cpu = new CPU();
Memory memory = new Memory();
HardDrive hardDrive = new HardDrive();
cpu.freeze();
memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE));
cpu.jump(BOOT_ADDRESS);
cpu.execute();
}
}
/* Client */
class You {
public static void main(String[] args) {
Computer facade = /* grab a facade instance */;
facade.startComputer();
}
}
장단점
장점
- 클라이언트와 서브시스템 간의 결합도를 낮출 수 있다.
- 서브시스템을 사용할 때 다뤄야 하는 객체의 수가 줄어든다.
- 서브시스템에 대한 의존성을 한 곳으로 모을 수 있다.
- 코드를 더 간결하게 읽을 수 있다.
단점
- 퍼사드 클래스가 서브시스템에 대한 모든 의존성을 갖게 된다.
Reference
- 퍼사드 패턴 - 위키백과
- 클린 아키텍처