SMALL
퍼사드 패턴은 프로그래밍 언어에서 관심사를 분리하는 패턴이다.
퍼사드의 어원은 프랑스어로 건물의 정면이라는 뜻을 갖고 있다.
건물의 외관, 겉모습을 말하며 사전적으로는 '표면, 허울'로도 해석된다.
퍼사드는 요즘과 같이 협업과 대형 시스템을 개발하고 배포하는 데 자주 응용되는 패턴이다.
퍼사드는 시스템 결합과 사용이 용이하도록 관심사를 분리한다.
퍼사드 패턴은 강력한 결합 구조를 해결하기 위해 코드의 의존성을 줄이고 느슨한 결합으로 구조를 변경한다.
퍼사드 패턴은 메인 시스템과 서브 시스템 중간에 위치하는데, 새로운 인터페이스 계층을 추가하여 시스템 간 의존성을 해결한다.
퍼사드는 GoF에서 설명하는 구조 패턴 중 하나며 퍼사드 패턴은 싱글턴 추상 팩토리라고 불리기도 한다.
퍼사드는 복잡한 구조의 서브 시스템을 간단하게 호출할 수 있도록 하는 인터페이스 모음이다.
먼저, 퍼사드를 사용하지 않는 경우에 Client 코드를 보자.
public class Package1 {
public void process() {
System.out.println("Package 1 Process ");
}
}
public class Package2 {
public void process() {
System.out.println("Package process _");
}
}
public class Package3 {
public void process() {
System.out.println("Package 3 - process");
}
}
위의 내용은 서브시스템을 간략하게 예제를 위해 만든 것 들이다.
그럼 직접적으로 호출하는 코드는 아래와 같다.
public static void main(String[] args) {
Package1 p1 = new Package1();
Package2 p2 = new Package2();
Package3 p3 = new Package3();
p1.process();
p2.process();
p3.process();
}
이러한 식으로 사용자 코드에 서브 시스템의 클래스를 직접적으로 가져다 사용하게 되어서 결합도가 높아진다.
그러면 퍼사드 패턴을 사용하는 경우를 보자.
public class Facade {
private Package1 p1;
private Package2 p2;
private Package3 p3;
Facade() {
p1 = new Package1();
p2 = new Package2();
p3 = new Package3();
}
public void processFacade() {
p1.process();
p2.process();
p3.process();
}
}
public static void main(String[] args) {
Facade facade = new Facade();
facade.processFacade();
}
각각의 패키지 객체를 직접 실행하는 것이 아니라 퍼사드 패턴의 메서드를 통해 한번에 실행한다.
퍼사드 패턴의 효과
- 서브 시스템 보호
- 클라이언트가 서브 시스템의 구성 요소를 직접 호출하지 않으므로 잘못된 사용을 방지할 수 있다
- 확장성
- 결합도 감소
- 직접적으로 서브 시스템의 객체에 접근하지 않고 인터페이스와 유사한 역할을 하는 퍼사드를 이용하여 서브 시스템에 접근
- 계층화
- 서브 시스템이 계층화된 구조를 갖더라도 퍼사드는 계층 단계별로 접근하여 행위를 호출할 수 있다
- 이식성
- 공개 인터페이스
- 퍼사드는 공개되는 기능만 인터페이스로 제공하는데, 이 경우 일시적으로 특정 기능을 감추는 효과를 얻을 수 있다
LIST
'DesignPattern' 카테고리의 다른 글
[DesignPattern] Decorator Pattern (장식자 패턴) (0) | 2021.06.12 |
---|---|
[DesignPattern] Composite Pattern (복합체 패턴) (0) | 2021.06.11 |
[DesignPattern] Bridge Pattern ( 브리지 패턴 ) (0) | 2021.06.02 |
[DesignPattern] Adapter Pattern ( 어댑터 패턴 ) (0) | 2021.05.25 |
[DesignPattern] Prototype Pattern ( 프로토타입 패턴 ) (0) | 2021.05.24 |