facade 패턴

김대익·2022년 3월 31일
0

facade는 건물 정문 외벽을 뜻한다.
건물의 겉은 단순하지만 내부는 복잡한 것처럼

복잡한 내용은 숨겨두고 사용을 위한 간단한 인터페이스만을 제공하는 패턴이다.


위와 같이 여러 클래스나 라이브러리를 사용해야하는 경우 클라이언트가
이들간의 관계를 생각하며 복잡하게 사용해야되는 경우가 있다.


이 때 간편한 인터페이스를 제공해주는 facade패턴을 이용하여 클라이언트는 더 쉽게 개발이 가능해진다.

만약 3단 추진 로켓이 있다면 차례대로 점화, 분리 과정이 일어날 것이다.
만약 클라이언트가 1~3단 각 부분에 명령하여 이 모든 과정을 설정한다면 복잡할 것이다.


이 때 로켓 한 덩어리로 생각하고
점화, 분리 내부 로직은 알아서 처리하고 클라이언트는 로켓 발사 명령만 신경쓴다면 매우 간편할 것이다.

class Stage1:
  def ignite(self):
    print('1st stage ignition')

  def liftOff(self):
    print('1st stage liftOff')

  def eject(self):
    print('1st stage ejection')

  def comeBack(self):
    print('1st stage return')

class Stage2:
  def ignite(self):
    print('2nd stage ignition')

  def eject(self):
    print('2nd stage ignition')

class Capsule:
  def ignite(self):
    print('capsule ignition')
  
  def landing(self):
    print('capsule landing/deploy')

위와 같이 각 부품마다 명령을 가지고 있을 떄

class Rocket:
  def __init__(self):
    self.stage1 = Stage1()
    self.stage2 = Stage2()
    self.capsule = Capsule()

  def launch(self):
    self.stage1.ignite()
    self.stage1.liftOff()
    self.stage1.eject()
    self.stage2.ignite()
    self.stage1.comeBack()
    self.stage2.eject()
    self.capsule.ignite()
    self.capsule.landing()

모든 절차를 가지고 있는 메서드가 있다면

rocket = Rocket()
rocket.launch()

rocket.launch()처럼 클라이언트는 내부 과정은 신경 쓸 필요없이 메서드 실행 한번이면 된다.

0개의 댓글