티스토리 뷰
🐙 퍼사드 패턴이란?
- 퍼사드는 건물의 입구쪽 전경을 의미
- 건물 안에 무엇이 있는지 알 수 없음
- 배관 / 수도가 어떻게 되어있는지 알 수 없음
- 퍼사드 패턴은 그 모든 디테일을 숨기는 것
- 복잡한 서브 시스템의 의존성을 최소화하는 패턴
- 클라이언트가 사용해야 하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화할 수 있음
- 클라이언트는 퍼사드만을 사용하고, 복잡한 디테일은 그 뒤로 숨기는 것
- tightly coupled 가 아닌 loosely coupled 로 바꾸는 것
🐙 퍼사드 패턴 구현해보기
편지를 쓴다고 가정해보자.
package FacadePattern.before;
public class App {
public static void main(String[] args) {
Paper paper = new Paper("하얀색");
Message message = new Message("To. 선생님께");
Pencil pencil = new Pencil("검은색");
String paperColor = paper.getColor();
String messageContent = message.getContent();
String pencilColor = pencil.getColor();
System.out.println(paperColor + "색의 종이에 " + pencilColor + "색의 연필로 " + messageContent + " 라고 씁니다.");
}
}
종이를 준비하고, 내용을 작성하고, 연필을 준비한다. 이 코드는 클래스 간의 의존성이 높다.
또한 클라이언트가 서브 클래스의 구조를 모두 드러낸다. 캡슐화가 깨진다. 그러나, 파사드 패턴을 따른다면 이 모든 의존성을 간단하게 추상화 할 수 있다.
package FacadePattern.after;
public class Letter {
private Message message;
private Pencil pencil;
private Paper paper;
public Letter(
String paperColor,
String messageContent,
String pencilColor
) {
this.message = new Message(messageContent);
this.pencil = new Pencil(pencilColor);
this.paper = new Paper(paperColor);
}
public void write() {
String paperColor = paper.getColor();
String messageContent = message.getContent();
String pencilColor = pencil.getColor();
System.out.println(paperColor + "색의 종이에 " + pencilColor + "색의 연필로 " + messageContent + " 라고 씁니다.");
}
}
Letter 라는 클래스를 만들어 편지를 작성하는 일련의 과정을 Facade 패턴으로 숨긴다.
package FacadePattern.after;
public class App {
public static void main(String[] args) {
Letter letter = new Letter("하얀색", "검은색", "To. 선생님께");
letter.write();
}
}
따라서 클라이언트 코드는 위와 같이 간단해질 수 있다.
직접 클라이언트가 클래스를 사용하는 것이 아니라 인터페이스 하나를 통해 압축시켜서 사용할 수 있다. 클라이언트는 퍼사드만을 사용하고 디테일은 그 뒤로 숨기게 된다.
🐙 퍼사드 패턴의 장점 / 단점
장점
- 서브 시스템에 대한 의존성을 한 곳으로 몰 수 있다.
단점
- 퍼사드 클래스가 서브 시스템에 대한 모든 의존성을 가지게 된다.
🐙 퍼사드 패턴에 대한 의문점..
강의에서 설명해주신 대로, 직접 코드를 구현해보면서 조삼모사.. 아닌가 하는 생각이 들었다.
결국에는 인터페이스 내부에 의존성이 엄청나게 부여되는데, 그게 그거 아닌가.. 했다.
그러나 클라이언트 코드가 확실히 간결해지고 서브 클래스의 모든 구조를 여실히 드러내는 것이 아니기 때문에 가독성과 캡슐화 관점에서는 확실히 좋다고 생각했다.
'자바스터디' 카테고리의 다른 글
[Gof의 디자인패턴] 프록시 패턴 (1) | 2022.12.02 |
---|---|
[Gof의 디자인패턴] 플라이웨이트 패턴 (0) | 2022.12.02 |
[Gof의 디자인패턴] 데코레이터 패턴 (0) | 2022.11.27 |
[Gof의 디자인패턴] 컴포짓 패턴 (0) | 2022.11.24 |
[Gof의 디자인패턴] 브릿지 패턴 (0) | 2022.11.01 |