• design-pattern
  • oop
  • java

Facade 패턴

여러 저수준 인터페이스를 하나의 고수준 인터페이스로 묶는 Facade 패턴을 컴퓨터 부팅 예제로 정리한다.

시리즈 · 디자인 패턴1 / 2
  1. Facade 패턴
  2. 생성 패턴: Abstract Factory와 Builder

Facade 패턴이란

저수준 인터페이스들을 하나의 고수준 인터페이스로 묶어 주는 패턴이다.

어떤 클래스에서 여러 저수준 인터페이스의 동작을 제어하려면 각각을 일일이 호출해야 한다. 이들을 하나의 고수준 인터페이스로 묶으면 한 번의 호출로 제어할 수 있다. 이 고수준 인터페이스를 통합 인터페이스라고 부른다.

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