승상의 코딩 블로그

디자인 패턴 - 퍼사드 패턴(Facade Pattern) with 파이썬(python) 본문

Python (파이썬)

디자인 패턴 - 퍼사드 패턴(Facade Pattern) with 파이썬(python)

양승상 2023. 7. 10. 21:49
반응형

Facade 는 Oxford 사전에서 아래의 의미를 가집니다.

1. the face of a building

2. an outward appearance that is maintained to conceal a less pleasant or creditable reality.

    - 먼가 좋지 않아보이는 것을 숨기기 위한 겉모습을 의미합니다

 

Facade 패턴이란 복잡한 서브 시스템을 간단하게 사용할 수 있는 인터페이스를 제공하는 패턴입니다.

 

아래는 물건을 주문하는 예시입니다.

class Inventory:
    def checkStock(self, productId):
        print(f"check stock for {productId}")
        
class Payment:
    def approvePayment(self, amount):
        print(f"approve payment for {amount}")
        
class Shipping:
	def ship(self, destination):
        print(f"shipping product to {destination}") 
        
        
class OrderFacade:
    def __init__(self):
        self.inventory = Inventory()
        self.payment = Payment()
        slef.shipping = Shipping()
    
    def placeOrder(self, productId, amount, destination):
        self.inventroy.checkStock(productId)
        self.payment.approvePayment(amount)
        self.shipping.ship(destination)
        
orderFacade = OrderFacade()
orderFacade.placeOrder("candy", "100", "my home")

OrderFacade 는 사용자의 자율성을 줄이고 사용자가 진짜 필요로 하는 기능(orderPlace)만을 제공합니다.

Q. Inventory, Payment, Shipping 클래스를 직접적으로 제어해서 주문하는 것이 사용자가 원하는 것일까요? 

A. 사용자는 그저 물품을 주문하고 싶습니다.

 

간단한 프로그램에서 10개에 대한 함수를 알았다면, 복잡해지면 100개, 1000개의 함수에 대해 알아야 할 수 있다. 

사람의 머리는 사소한 모든 것을 기억하지 않는다.

프로젝트가 커질수록 정말 중요한 부분에 집중할 수 있도록, 관리 포인트를 줄이는 것이 중요하다. 

 

* 추가. 퍼사드는 내부의 복잡한 것들을 숨긴다고 했다.

  그렇다면 어떤 것들을 숨길 수 있을지 생각해보길 바란다.

  예를 들어, 단순히 함수들간의 호출 순서를 숨길 수 있고, 객체의 초기화도 숨길 수도 있다. 또한 각 클래스들의 의존성도 숨길 수 있다. 

반응형
Comments