작심삼일

12주차. Facade 본문

스터디/디자인 패턴

12주차. Facade

yun_s 2021. 8. 18. 21:10
728x90
반응형

디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.

틀린 부분은 알려주시면 감사하겠습니다.

어떤 패턴인가

한 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스(관리자)를 제공하는 패턴으로, 서브시스템을 사용하기 쉽도록 상위 수준의 인터페이스를 정의합니다.

 

사용자가 다루어야할 객체의 수가 줄어들며, 서브시스템을 쉽게 사용할 수 있다.

서브시스템과 사용자 코드 간의 결합도를 약하게 만든다.


어떻게 쓰는가

Facade: 단순하고 일관된 통합 인터페이스를 제공하며, 서브세스템을 구성하는 어떤 클래스가 어떤 요청을 처리해야 하는지 알고 있으며, 사용자의 요청을 해당 서브시스템 객체에 전달합니다.

서브시스템 클래스들: 서브시스템의 기능을 구현하고, Facade 객체로 할당된 작업을 실제로 처리하지만 Facade에 대한 아무런 정보가 없습니다.

class Subsystem1:
    def play(self):
        print('Play Music')

class Subsystem2:
    def stop(self):
        print('Stop Music')

class Subsystem3:
    def pause(self):
        print('Pause Music')



class Facade:
    def __init__(self):
        self.one = Subsystem1()
        self.two = Subsystem2()
        self.three = Subsystem3()

-----------------------------------------------------
f = Facade()
f.one.play()
f.three.pause()
f.two.stop()

어디서 활용되는가

이는 책의 내용 (p. 255)을 그대로 가져왔다.

1. 복잡한 서브시스템에 대한 단순한 인터페이스 제공이 필요할 때

2. 추상 개념에 대한 구현 클래스와 사용자 사이에 너무 많은 종속성이 존재할 때

3. 서브시스템을 계층화시킬 때


Adapter 패턴과 차이는 무엇인가

Adapter는 기존에 사용하던 클래스를 원하는 대로 바꾸기 위해 사용하는 개념(1:1 매칭으로)이라면, Facade는 총괄하는  느낌이다.


My Opinion

서브클래스의 수가 많을 때 이를 각각 다루기 어지러워지므로, 이 때 Facade 패턴을 사용하면 편하다.

이 패턴은 종종 사용하게될 것 같다.

728x90
반응형

'스터디 > 디자인 패턴' 카테고리의 다른 글

14주차-1. Observer  (0) 2021.09.23
13주차. Mediator  (0) 2021.09.09
11주차. Builder  (0) 2021.08.11
10주차. Memento  (0) 2021.07.28
9주차-2. Command  (0) 2021.07.21
Comments