Home
DesignPattern
퍼사드 패턴 - 정의와 활용 (Facade Pattern)
devfoxstar
devfoxstar
October 02, 2022
1 min

Table Of Contents

01
정의
02
용도
03
설계
04
예제
05
참고

정의

Facade는 프랑스어 façade에서 유래된 단어로 건물의 외관이나 정면을 의미합니다.

Facade Pattern은 소프트웨어 공학의 Design Pattern 중 하나입니다.
객체 지향 프로그래밍에서 자주 쓰입니다.


용도

복잡하고 방대한 클래스 라이브러리의 코드는 접근이 어렵고 사용성도 떨어집니다.
그래서 해당 코드를 쉽게 사용할 수 있도록, 간편한 인터페이스를 제공합니다.

퍼사드 패턴을 사용하는 이유는 간편한 인터페이스 제공과 사용성 향상에 있습니다.

  • 간편한 인터페이스를 제공해서 사용성을 높인다.
  • 원본 코드보다 간결한 코드로 작성해서 분석이 쉽다.
  • 원본 코드에 대한 의존성을 감소시킨다.
  • 분리된 코드 개발로 유연성이 향상된다.
  • 공통 작업에 유리한 메소드를 제공할 수 있다.

설계

퍼사드 패턴의 기본 구조는 Client - Facade API - Subsystem입니다.
원래 Client는 각각의 Subsystem을 개별적으로 접근해야 합니다.

하지만 퍼사드 패턴을 적용하면 퍼사드 API에만 접근해서 각각의 Subsystem 기능을 사용할 수 있습니다.

Facade Pattern
Facade Pattern

퍼사드 패턴은 래퍼(Wrapper)가 특정 인터페이스를 준수해야 합니다.
따라서 원본 라이브러리의 기능을 간편하게 제공하는 목적이 있습니다.

만약 다형성(Polymorphism)을 지원하고 싶다면, 어댑터 패턴(Adapter pattern)을 사용해야 합니다.


예제

고객이 주식을 주문하는 간단한 로직입니다.
고객 주문이 발생하면, Payment - Order - Stock 클래스의 메서드를 호출해야 합니다.

하지만 퍼사드 패턴을 활용하면, Customer 클래스의 메서드만 호출하면 끝납니다.

//Complex parts
class Payment {
    public void takePayment() { ... }
    ...
}

class Order {
    public void createOrder() { ... }
    ...
}

class Stock {
    public void adjustStock() { ... }
    ...
}

//Facade
class Customer {
    public void placeOrder() {
        Payment payment = new Payment();
        Order order = new Order();
        Stock stock = new Stock();

        payment.takePayment();
        order.createOrder();
        stock.adjustStock();
    }
}

//Client
class You {
    public static void main(String[] args) {
        Customer customer = new Customer();
        customer.placeOrder();
    }
}

참고

복합 서브 컴포넌트의 메서드를 일일이 호출할 필요가 없습니다.
간편한 퍼사드 API를 활용할 수 있습니다.

https://springhow.com/facade-pattern/
https://springhow.com/facade-pattern/

공장 안에서 어떤 일을 수행하는지 파악할 필요가 없습니다.
입구에서 필요한 내용을 요청하면 간편하게 전달 받을 수 있습니다.

https://refactoring.guru/design-patterns/facade
https://refactoring.guru/design-patterns/facade


Tags

#DesignPattern#Facade#Pattern
© 2024, All Rights Reserved.

Quick Links

About Me

Media