CS

퍼사드 패턴

baek-dev 2025. 4. 14. 20:51

퍼사드 패턴(Facade Pattern)이란 무엇인가

퍼사드(Facade) 패턴은 복잡한 시스템이나 서브시스템에 대해 단순화된 인터페이스를 제공하는 디자인 패턴임.
여러 개의 클래스나 복잡한 로직을 하나의 인터페이스로 감싸서, 외부에서 쉽게 사용할 수 있도록 도와줌.

"퍼사드(Facade)"라는 단어는 건물의 '정면'이나 '외관'을 뜻하는데, 건물 내부가 복잡하더라도 외부에서는 단순한 입구만 사용하면 되는 것처럼, 복잡한 구현을 감추고 단순한 인터페이스만 제공하는 것이 퍼사드 패턴의 핵심임.


1. 퍼사드 패턴의 구조

퍼사드 패턴의 구조는 다음과 같음.

클라이언트 → 퍼사드(Facade) → 여러 서브시스템 클래스들
  • 클라이언트
    • 복잡한 서브시스템을 직접 다루지 않고, 퍼사드 인터페이스를 통해 기능을 사용함.
  • 퍼사드 (Facade)
    • 복잡한 내부 구현을 숨기고 클라이언트에게 단순한 인터페이스를 제공함.
  • 서브시스템 (Subsystem)
    • 실제 비즈니스 로직이 구현된 클래스들임. 퍼사드 클래스가 내부적으로 이들을 호출함.

2. 퍼사드 패턴을 사용하는 이유

  • 복잡성을 줄이기 위해
    • 외부에서 복잡한 내부 구현을 알 필요 없이 간단한 메서드만 사용하면 되기 때문임.
  • 유지보수를 쉽게 하기 위해
    • 서브시스템이 변경되어도 퍼사드 인터페이스만 유지하면 클라이언트 코드에 영향을 주지 않음.
  • 서브시스템 의존성을 낮추기 위해
    • 퍼사드가 중간에서 역할을 하므로 클라이언트와 서브시스템 간의 강한 결합도를 낮출 수 있음.

3. 퍼사드 패턴 예제 (자바)

아래는 퍼사드 패턴의 간단한 예제임.

서브시스템 클래스들

public class CPU {
    public void start() {
        System.out.println("CPU started");
    }
}

public class Memory {
    public void load() {
        System.out.println("Memory loaded");
    }
}

public class HardDrive {
    public void read() {
        System.out.println("Hard drive reading");
    }
}

퍼사드 클래스

public class ComputerFacade {
    private CPU cpu;
    private Memory memory;
    private HardDrive hardDrive;

    public ComputerFacade() {
        this.cpu = new CPU();
        this.memory = new Memory();
        this.hardDrive = new HardDrive();
    }

    public void startComputer() {
        cpu.start();
        memory.load();
        hardDrive.read();
        System.out.println("Computer started successfully");
    }
}

클라이언트 코드

public class Main {
    public static void main(String[] args) {
        ComputerFacade computer = new ComputerFacade();
        computer.startComputer();
    }
}

 

실행 결과

CPU started
Memory loaded
Hard drive reading
Computer started successfully

위 예제에서 클라이언트는 복잡한 CPU, Memory, HardDrive 클래스를 직접 다루지 않고, 퍼사드 클래스인 ComputerFacade를 통해 컴퓨터를 간편하게 켤 수 있음.


4. 퍼사드 패턴의 장단점

장점 단점
복잡한 서브시스템을 단순화할 수 있음 퍼사드 클래스가 너무 커지면 유지보수가 어려울 수 있음
클라이언트와 서브시스템 간 결합도를 낮출 수 있음 서브시스템 기능이 많을 경우 퍼사드가 과도하게 커질 수 있음
시스템을 사용하는 사람이 내부 구현을 몰라도 사용 가능함 너무 많은 기능을 퍼사드에 몰아넣으면 퍼사드 자체가 복잡해질 수 있음
서브시스템의 변경이 퍼사드 클래스에만 영향을 미치므로 유연성이 높아짐 잘못 설계하면 퍼사드가 병목이 될 수 있음

5. 퍼사드 패턴이 실무에서 사용되는 사례

  • Spring Framework
    • JdbcTemplate 클래스가 복잡한 JDBC 로직을 내부적으로 처리하고 단순한 인터페이스만 제공함.
  • 웹 프레임워크
    • 요청 처리, 응답 반환, 예외 처리 등 복잡한 HTTP 처리를 컨트롤러 레이어가 퍼사드처럼 간단하게 감싸서 제공함.
  • API Gateway
    • 마이크로서비스 아키텍처에서 여러 API를 하나의 엔드포인트로 묶어서 외부에 단일 인터페이스로 제공함.
  • IDE (통합 개발 환경)
    • 빌드, 디버깅, 테스트 등 복잡한 프로세스를 버튼 클릭 한 번으로 처리하게 하는 것 역시 퍼사드 패턴임.

정리

퍼사드 패턴은 복잡한 시스템 내부를 감추고 클라이언트에게 단순화된 인터페이스를 제공하는 디자인 패턴임.
복잡한 클래스를 직접 사용하지 않고, 퍼사드를 통해 간단하게 기능을 호출할 수 있어 개발 생산성과 유지보수성을 높일 수 있음.
특히 대규모 시스템이나 서브시스템이 복잡한 경우 퍼사드 패턴을 사용하면 효과적으로 관리할 수 있음.

 

 

 

 

 

출처 : ChatGPT

'CS' 카테고리의 다른 글

SOLID 원칙  (0) 2025.04.04
DSL  (0) 2025.03.25
JIT(Just-In-Time) 컴파일러  (0) 2025.03.05
트러블 슈팅  (0) 2025.02.28
SSE (Server-Sent Events)  (0) 2025.02.19