퍼사드 패턴은 복잡한 시스템이나 서브시스템의 인터페이스를 단순화시켜 사용자에게 간단한 하나의 인터페이스를 제공하는 구조적인 패턴이다.
이 패턴은 클라이언트가 복잡한 시스템 내부 구조를 알 필요 없이 특정 기능을 수행할 수 있도록 한다.
퍼사드를 사용해야 하는 상황
- 복잡한 서브시스템이 존재하는 경우:
- 시스템이 여러 개의 복잡한 서브시스템으로 구성되어 있을 때, 각 서브시스템을 단순한 인터페이스로 노출시켜야 하는 경우에 퍼사드 패턴을 사용할 수 있다.
- 클라이언트와 서브시스템 간의 결합도를 낮춰야 하는 경우:
- 서브시스템의 변경이나 교체가 빈번하게 발생하는 경우, 클라이언트와 서브시스템 간의 직접적인 결합을 피하고자 할 때 퍼사드를 도입할 수 있다.
- 인터페이스의 간소화가 필요한 경우:
- 여러 개의 복잡한 인터페이스를 단일한 간소한 인터페이스로 제공하고자 할 때, 퍼사드 패턴은 클라이언트에게 편리한 방법을 제공한다.
- 유연성과 확장성이 요구되는 경우:
- 새로운 서브시스템을 추가하거나 기존 서브시스템을 변경해도 클라이언트에게는 퍼사드의 인터페이스만 노출시킬 수 있다.
- 시스템의 일관성을 유지하고자 하는 경우:
- 여러 개의 서브시스템 간에 일관성을 유지하고자 할 때, 퍼사드를 통해 클라이언트에게 일관된 인터페이스를 제공할 수 있다.
- 특정 기능을 효과적으로 노출 또는 감추어야 하는 경우:
- 일부 서브시스템의 특정 기능을 클라이언트에 노출하거나, 그 기능을 감추어야 하는 경우에 퍼사드 패턴을 쓸 수 있다.
퍼사드 패턴의 주요 구성 요소
- 퍼사드(Facade):
- 클라이언트에게 간단한 인터페이스를 제공하는 역할.
- 하나 이상의 서브시스템을 조율하고, 클라이언트의 요청을 해당 서브시스템에 전달한다.
- 서브시스템(Subsystems):
- 퍼사드가 감싸는 복잡한 시스템이나 일련의 클래스들을 나타낸다.
- 각 서브시스템은 독립적으로 동작하며, 퍼사드에 의해 통합된다.
- 클라이언트(Client):
- 퍼사드를 이용해 서브시스템에 접근하는 주체.
- 퍼사드를 통해 복잡한 시스템을 더 쉽게 사용할 수 있다.
예제
// 전등 시스템
class LightSystem {
public void turnOn() {
System.out.println("전등이 켜집니다.");
}
public void turnOff() {
System.out.println("전등이 꺼집니다.");
}
}
// 에어컨 시스템
class AirConditionerSystem {
public void turnOn() {
System.out.println("에어컨이 켜집니다.");
}
public void turnOff() {
System.out.println("에어컨이 꺼집니다.");
}
}
// 보안 시스템
class SecuritySystem {
public void arm() {
System.out.println("보안 시스템이 가동됩니다.");
}
public void disarm() {
System.out.println("보안 시스템이 해제됩니다.");
}
}
// 퍼사드
class HomeFacade {
private LightSystem lightSystem;
private AirConditionerSystem airConditionerSystem;
private SecuritySystem securitySystem;
public HomeFacade() {
this.lightSystem = new LightSystem();
this.airConditionerSystem = new AirConditionerSystem();
this.securitySystem = new SecuritySystem();
}
public void leaveHome() {
lightSystem.turnOff();
airConditionerSystem.turnOff();
securitySystem.arm();
}
public void returnHome() {
lightSystem.turnOn();
airConditionerSystem.turnOn();
securitySystem.disarm();
}
}
// 클라이언트
public class Client {
public static void main(String[] args) {
HomeFacade homeFacade = new HomeFacade();
// 집을 떠날 때
System.out.println("집을 떠납니다.");
homeFacade.leaveHome();
// 집으로 돌아올 때
System.out.println("\n집으로 돌아옵니다.");
homeFacade.returnHome();
}
}
728x90
'디자인 패턴' 카테고리의 다른 글
Flyweight Pattern (0) | 2024.05.25 |
---|---|
Factory Pattern (0) | 2024.05.18 |
Decorator Pattern (0) | 2024.05.05 |
Composite Pattern (1) | 2024.05.01 |
Command Pattern (0) | 2024.04.28 |