노트

퍼사드 패턴

Facade

설계#pattern · 연결된 개념 6개

쉽게 말하면

퍼사드 패턴은 호텔 프런트 데스크 같은 거예요. 청소, 세탁, 택시 예약을 각각 어디에 부탁할지 몰라도 프런트 한 곳에 말하면 안쪽에서 알아서 챙겨 주니, 내부가 바뀌어도 손님은 그대로예요.

비유가 깨지는 곳 프런트가 있다고 안쪽 문이 잠기는 게 아니듯, 퍼사드는 하위 시스템을 숨기지 않고 자주 쓰는 길만 쉽게 만들어요. 다만 모든 기능을 한 퍼사드에 몰면 또 하나의 거대한 객체가 되니 용도별로 나눠요.

복잡한 하위 시스템 앞에 단순한 창구 하나를 세워, 호출자가 내부의 여러 객체와 호출 순서를 몰라도 되게 하는 패턴.

class VideoConverter {
  convert(file: string, format: 'mp4' | 'webm') {
    const source = new VideoFile(file)
    const codec = CodecFactory.extract(source)
    const buffer = BitrateReader.read(source, codec)
    const result = BitrateReader.convert(buffer, format)
    return new AudioMixer().fix(result)
  }
}
// 호출자는 new VideoConverter().convert('a.ogg', 'mp4')만 안다
  • 하위 시스템과의 결합이 퍼사드 한 곳으로 모인다. 내부 라이브러리를 바꿔도 호출자는 그대로다
  • 하위 시스템을 숨기는 것이 아니라 자주 쓰는 길을 쉽게 만드는 것이다. 세밀한 제어가 필요하면 하위 객체를 직접 쓸 수도 있다
  • 모든 기능을 한 퍼사드에 몰아넣으면 또 하나의 거대한 서비스 객체가 된다. 용도별로 나눈다
  • 계층형 구조의 서비스 계층, 여러 API 호출을 묶어 화면에 맞게 내려주는 BFF(Backend for Frontend), 프런트엔드에서 여러 훅을 묶은 커스텀 훅이 비슷한 역할을 한다

호출자 입장의 복잡성을 창구 뒤로 옮긴다는 점에서 복잡성 보존의 법칙의 한 예이고, 서비스 단위의 디미터 법칙다. 구조 패턴 전체는 구조 패턴.

출처: Facade — Refactoring.Guru

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 컴포지트 패턴

    개별 객체(잎, Leaf)와 객체들의 묶음(가지, Composite)을 같은 인터페이스로 다뤄, 트리 구조를 재귀적으로 처리하는 패턴.

  • 디자인 패턴

    반복해서 나타나는 설계 문제에 대한 검증된 해결 구조와 그 이름. 복사해 쓰는 완성 코드가 아니라 객체들이 협력하는 방식을 설명하는 어휘다. 1994년 이른바 GoF(Gang of Four, 네 명의 저자)의 책 『Design Patterns: Elements of Reusable Object-Oriented Software』가 23개 패턴을 정리하며 널리 퍼졌다.

  • Feature-Sliced Design

    Feature-Sliced Design(FSD)은 프론트엔드 코드를 레이어(layer)·슬라이스(slice)·세그먼트(segment) 세 단계로 나누고, 누가 누구를 import할 수 있는지를 규칙으로 정하는 아키텍처 방법론이다. 폴더 이름 규약처럼 보이지만 본질은 의존 방향 규칙이다.

  • 데코레이터 패턴

    같은 인터페이스를 구현한 래퍼로 객체를 감싸, 원래 객체를 고치지 않고 앞뒤에 기능을 덧붙이는 패턴. 래퍼를 여러 겹 쌓아 기능을 조합할 수 있다.

  • 상태 패턴

    객체의 행동이 현재 상태에 따라 달라질 때, 상태마다 별도 객체를 두고 현재 상태 객체에 행동을 맡기는 패턴. 상태별 조건문이 메서드마다 반복되는 문제를 푼다.

보기 옵션