퍼사드 패턴
퍼사드 : 건물의 입구 쪽을 바라보는 건물의 전경 -> 건물의 외벽을 본다고 건물의 안이 어떤지는 알 수 없다.
복잡한 서브 시스템 의존성을 최소화하는 방법
--> 클라이언트가 사용해야 하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화할 수 있다.
(서브시스템은 우리가 사용하는 라이브러리나 프레임워크이다.)
퍼사드 패턴은 클라이언트가 서브 시스템 클래스나 메소드를 직접사용하는 것이 아니라 중간에서 복잡한 서스 시스템을 감추고 우리가 사용하는 기능에만 대한 인터페이스 또는 클래스로 압축시켜 사용하게 해준다.
코드로 살펴보기
자바는 이메일 관련 라이브러리를 제공한다. 그런데 아래의 코드들을 보면 클라이언트가 라이브러리에 대해 지나치게 많이 알아야한다.
즉 라이브러리와 아주 단단하게 의존하고 있는데, 우리는 loosley coupled한 코드를 만들어, 복잡한 서브 시스템을 직접적으로 사용하지 않도록 해주고 싶은 것이다.
위의 코드를 보면 Client가 너무 많은 것들에 대해 직접 설정하고 있는 것을 볼 수 있다.
먼저 이러한 역할들을 나눠보자.
EmailSetting
EmailSender
EmailMessage
이제 Client는 아래와 같아 진다.
facade에 대한 의존성은 어쩔 수 없지만 라이브러리에 대한 의존성이 낮아지고, test하기가 더 쉬운 코드가 된다. (이전의 Client는 라이브러리도 많고, static메소드를 많이 사용하기에 test가 힘들다.)
장점과 단점
장점
서브 시스템에 대한 의존성을 한곳으로 모을 수 있다.
단점
퍼사드 자체가 서브시스템에 대한 의존성을 가지게 되어 의존성을 피할 수는 없다.
출처: 인프런 백기선님 '코딩으로 학습하는 GoF 강의'
https://www.inflearn.com/course/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4
'Design Pattern' 카테고리의 다른 글
12. 프록시 패턴 (proxy pattern) (0) | 2021.12.23 |
---|---|
11. 플라이웨이트 패턴 (flyweight pattern) (0) | 2021.12.22 |
9. 데코레이터 패턴(Decorator pattern) (0) | 2021.12.21 |
8. 컴포짓 패턴 (Composite pattern) (0) | 2021.12.19 |
7. 브릿지 패턴 (Bridge pattern) (2) | 2021.12.18 |