본문 바로가기

Computer Science/Design Pattern

[Design Pattern] 퍼사드 패턴(Facade Pattern)에 대해서 - 컴도리돌이

728x90
728x90

 

퍼사드 패턴(Facade Pattern)

퍼사드(Facade)는 건물의 정면을 의미해요. 건물 내부의 복잡함을 숨기고 건물의 정면만을 나타나게 합니다. 
유저들은 건물의 정면에 있는 출입구를 통해 내부를 이용하게 됩니다. 즉, 건물의 정면이 마치 인터페이스가 되는 것이죠.🤔
 
시스템의 복잡한 부분을 감추고 사용자에게 단순한 인터페이스를 제공하는 개념이에요. 건물의 정면이 마치 출입구가 되어 건물 내부로 들어가는 것처럼, 사용자가 시스템의 내부 동작을 몰라도 간단한 인터페이스를 통해 시스템을 사용할 수 있게 해 줍니다. 
 
온라인 쇼핑몰을 예를 들어 다음 퍼사드 패턴에 대해서 설명해 볼게요 😊
 


 

퍼사드 패턴 적용 예시(Facade Pattern Example)

사용자는 제품을 검색하고 구매할 수 있지만, 그 내부에서는 재고 관리, 결제 처리, 배송 관리 등 작업이 이뤄집니다. 
사용자에게는 단순한 검색 및 결제 인터페이스만 제공되지만, 실제로는 많은 시스템들이 복잡하게 작동되는 거죠. 🥲
 
사용자가 쇼핑몰에서 제품을 구매할 때, 내부에서 필요한 기능이 뭐가 있을까요? 🤔
제가 지금 바로 생각나는 건 제품의 재고확인, 결제 처리, 배송 처리 순으로 크게 진행될 거 같아요. 
그래서 다음과 같이 해당 기능을 간단하게 메서드로 작성해 봤습니다. 😎
 

// 재고 관리 서비스
class InventoryService {
    boolean checkAvailability(String productId) {
        // 재고를 확인하는 로직
        return true; // 재고 있음
    }
}

// 결제 처리 서비스
class PaymentService {
    boolean processPayment(String paymentInfo) {
        // 결제를 처리하는 로직
        return true; // 결제 성공
    }
}

// 배송 관리 서비스
class ShippingService {
    boolean shipProduct(String productId, String address) {
        // 배송을 처리하는 로직
        return true; // 배송 성공
    }
}

 
위에 코드는 주석처리로 설명해 놨지만, 재고 확인, 결제 처리, 배송 처리 기능을 담당하는 메서드를 간단하게 적어 봤습니다. 🫥🫥
다음은 실제 사용자가 물품을 구매를 할 경우 실행되는 메서드를 작성해 봤습니다. 
 

// 온라인 쇼핑 퍼사드
class OnlineShoppingFacade {
    private InventoryService inventoryService;
    private PaymentService paymentService;
    private ShippingService shippingService;

    public OnlineShoppingFacade() {
        this.inventoryService = new InventoryService();
        this.paymentService = new PaymentService();
        this.shippingService = new ShippingService();
    }

    public boolean purchaseProduct(String productId, String paymentInfo, String address) {
        if (inventoryService.checkAvailability(productId)) {
            if (paymentService.processPayment(paymentInfo)) {
                return shippingService.shipProduct(productId, address);
            } else {
                System.out.println("결제 실패");
                return false;
            }
        } else {
            System.out.println("상품 품절");
            return false;
        }
    }
}

 
OnlineShoppingFacade는 재고 확인, 결제 처리, 배송 처리하는 서비스를 통합하고, 간단한 인터페이스를 제공해요.
해당 클래스에서 purchaseProduct 메서드는 제품을 구매하는 과정을 담당합니다.
첫 번째로 재고가 있는지 확인을 하고, 결제 처리를 해야겠죠.
그다음에는 배송 처리를 순차적으로 진행하며, 각 단계에서 문제가 발생하면 적절한 메시지를 출력하고 결과 값을 반환 처리 하였습니다.
 

public class Main {
    public static void main(String[] args) {
        OnlineShoppingFacade facade = new OnlineShoppingFacade();
        String productId = "ABC123";
        String paymentInfo = "1234-5678-9012-3456";
        String address = "123 Main St, Anytown";

        boolean purchaseResult = facade.purchaseProduct(productId, paymentInfo, address);
        if (purchaseResult) {
            System.out.println("구매 완료");
        } else {
            System.out.println("구매 실패");
        }
    }
}

 
이제 해당 객체를 생성하여 쇼핑 클래스를 초기화를 시킵니다. 그리고 사용자의 구매 정보 등을 기입하여, 제품을 구매하는 메서드만 실행시켜 결과 값을 확인하면 되겠죠
 
이렇게 예시를 보니깐 해당 패턴에 대해 어떤 생각이 드나요? 🙄
사용자는 물품을 구매하기만 했을 뿐인데 그 내부에서는 다양한 기능이 순차적으로 진행됩니다.  이처럼 퍼사드 패턴은 인터페이스를 통해 시스템을 사용할 수 있으며, 내부적으로 퍼사드가 복잡한 작업을 처리해 줍니다. 이로써 사용자는 시스템의 복잡성을 알 필요 없이 편리하게 작업을 수행할 수 있습니다. 
 


 

결론

퍼사드 패턴은 굉장히 많이 사용되게 되는 패턴 중 하나이며, 반복되는 코드를 줄이고 복잡한 내부 로직을 캡슐화하여 좀 더 객체지향적으로 코드를 작성할 수 있게 해주는 패턴입니다. 🧑‍💻
 
저도 업무를 보면서 여러 기능을 캡슐화하여 한 메서드를 통해 간단하게 사용하는 경우가 있었는데, 그것을 퍼사드 패턴(Facade Pattern)이라고 지칭하는지 처음 알게 되었습니다. 🫥
 
이번 기회에 해당 패턴에 대해 깊게 다룰 수 있게 되어서 좋았고,
너무 유익한 하루였네요. 😆
 


 

[Design Pattern] 퍼사드 패턴

앞의 게시글의 어댑터 패턴보다 더 자주 사용하게 되는 패턴인 퍼사드 패턴입니다.Facade는 건물의 정면의 의미합니다. 건물 내부의 복잡함을 숨기고 건물의 정면만을 나타나게 합니다. 사용자들

velog.io

💠 퍼사드(Facade) 패턴 - 완벽 마스터하기

Facade Pattern 퍼사드 패턴(Facade Pattern)은 사용하기 복잡한 클래스 라이브러리에 대해 사용하기 편하게 간편한 인터페이스(API)를 구성하기 위한 구조 패턴 이다. 예를들어 라이브러리의 각 클래스

inpa.tistory.com

[Design Pattern] Facade Pattern (퍼사드 패턴)

퍼사드 패턴(Facade Pattern)은 구조 패턴(Structural Pattern)의 한 종류로써, 복잡한 서브 클래스들의 공통적인 기능을 정의하는 상위 수준의 인터페이스를 제공하는 패턴이다.퍼사드 객체(Facade Object)는

velog.io

 


728x90
728x90