Facade Pattern
스프링 slf4j(Simple Logging Facade for Java) 를 공부하던 도중 못보던 디자인 패턴이 발견되었다. 그건 이름에도 나와있는 Facade Pattern이였고 이번에 구글링을 통해서 내용을 정리하기로 했다.
💡 Facade 패턴이란?
디자인 패턴의 '구조' 패턴 중 하나로 객체지향 개발법에서 많이 쓰인다. Facade(퍼사드)란 여러 복잡한 서브클래스들의 인터페이스를 한데 묶어 간략화된 인터페이스를 제공하는 객체를 말한다.
🧩 어떤 장점이 있나?
- 여러 서브시스템을 하나의 인터페이스로 둠으로써 복잡한 서브시스템을 사용하기 편하게 한다.
- 서브시스템의 '의존성'이 최소화된다.
📗 Facade Pattern UML
위의 클래스 다이어그램과 시퀀스 다이어그램에서 볼 수 있듯이 서브클래스들을 Facade라는 단일 인터페이스로 묶고, Client는 Facade를 사용하는 방식이다.
📖 구현
Code
class SubSystem1 {
void log() {
System.out.println("call at subSystem1 Object");
}
}
class SubSystem2 {
void log() {
System.out.println("call at subSystem2 Object");
}
}
class SubSystem3 {
void log() {
System.out.println("call at subSystem3 Object");
}
}
class FacadeClass {
private final SubSystem1 subSystem1;
private final SubSystem2 subSystem2;
private final SubSystem3 subSystem3;
public FacadeClass() {
this.subSystem1 = new SubSystem1();
this.subSystem2 = new SubSystem2();
this.subSystem3 = new SubSystem3();
}
void logSubSystems() {
subSystem1.log();
subSystem2.log();
subSystem3.log();
}
}
class Driver {
@Test
void facadeTest() {
FacadeClass facadeClass = new FacadeClass();
facadeClass.logSubSystems();
}
}
Output
위의 구현과 같이 Subsystem의 기능들을 Facade의 인터페이스에 묶어서 드라이버가 Facade를 한번만 불러도 모든 코드가 동작하는 모습을 볼 수 있다.
Reference
https://en.wikipedia.org/wiki/Facade_pattern
Facade pattern - Wikipedia
The facade pattern (also spelled façade) is a software-design pattern commonly used in object-oriented programming. Analogous to a facade in architecture, a facade is an object that serves as a front-facing interface masking more complex underlying or str
en.wikipedia.org