1. 퍼사드 패턴이란?
퍼사드(Facade) 패턴은 복잡한 서브시스템을 단순화하여 클라이언트가 더 쉽게 사용할 수 있도록 인터페이스를 제공하는 디자인 패턴입니다. 말 그대로 "건물의 정면(Facade)"처럼 내부 구조를 숨기고 단순한 접근점을 제공합니다. 이를 통해 코드의 가독성을 높이고 유지보수를 쉽게 만들어줍니다.
2. 퍼사드 패턴의 구성 요소
퍼사드 패턴은 세 가지 주요 구성 요소로 이루어져 있습니다:
- 서브시스템(Subsystem): 복잡한 내부 기능을 제공하는 클래스나 모듈.
- 퍼사드(Facade): 서브시스템에 대한 단순화된 인터페이스를 제공하는 클래스.
- 클라이언트(Client): 퍼사드 클래스를 통해 서브시스템과 상호작용하는 주체.
동작 원리
퍼사드 클래스는 여러 서브시스템을 하나로 묶어주는 역할을 합니다. 클라이언트는 서브시스템의 복잡한 동작을 몰라도 퍼사드를 통해 쉽게 접근할 수 있습니다.
3. 퍼사드 패턴 예제 (C#)
문제 상황
복잡한 홈 엔터테인먼트 시스템(예: TV, 스피커, 스트리밍 장치)을 설정하는 과정을 단순화하기 위해 퍼사드 패턴을 적용해보겠습니다.
// Subsystems
public class Television
{
public void TurnOn()
{
Console.WriteLine("Turning on the TV.");
}
public void SetChannel(int channel)
{
Console.WriteLine($"Setting TV channel to {channel}.");
}
}
public class SoundSystem
{
public void TurnOn()
{
Console.WriteLine("Turning on the sound system.");
}
public void SetVolume(int volume)
{
Console.WriteLine($"Setting sound system volume to {volume}.");
}
}
public class StreamingDevice
{
public void Connect()
{
Console.WriteLine("Connecting to the streaming device.");
}
public void Play(string movie)
{
Console.WriteLine($"Playing movie: {movie}.");
}
}
// Facade
public class HomeTheaterFacade
{
private Television tv;
private SoundSystem sound;
private StreamingDevice streaming;
public HomeTheaterFacade()
{
tv = new Television();
sound = new SoundSystem();
streaming = new StreamingDevice();
}
public void WatchMovie(string movie)
{
Console.WriteLine("Setting up the home theater...");
tv.TurnOn();
tv.SetChannel(3);
sound.TurnOn();
sound.SetVolume(20);
streaming.Connect();
streaming.Play(movie);
Console.WriteLine("Enjoy your movie!");
}
}
// Client
public class Program
{
public static void Main(string[] args)
{
HomeTheaterFacade homeTheater = new HomeTheaterFacade();
homeTheater.WatchMovie("Inception");
}
}
실행 결과
Setting up the home theater...
Turning on the TV.
Setting TV channel to 3.
Turning on the sound system.
Setting sound system volume to 20.
Connecting to the streaming device.
Playing movie: Inception.
Enjoy your movie!
이 예제에서 클라이언트는 복잡한 홈 엔터테인먼트 시스템의 설정 과정을 몰라도 HomeTheaterFacade 클래스를 통해 간단히 영화 감상을 시작할 수 있습니다.
4. 퍼사드 패턴 사용 시 고려할 점
장점
- 간결한 인터페이스 제공: 클라이언트는 복잡한 서브시스템에 대해 알 필요가 없습니다.
- 유지보수 용이성: 서브시스템을 수정해도 퍼사드 인터페이스만 유지되면 클라이언트 코드를 변경할 필요가 없습니다.
- 결합도 감소: 클라이언트와 서브시스템 간의 의존성을 줄여줍니다.
주의점
- 유연성 감소: 퍼사드에 의존하게 되면 서브시스템의 세부 기능에 직접 접근하기 어려워질 수 있습니다.
- 필요 이상으로 단순화하지 않기: 퍼사드를 설계할 때 너무 많은 기능을 포함하면 오히려 유지보수가 어려워질 수 있습니다.
5. 결론
퍼사드 패턴은 복잡한 서브시스템을 숨기고 단순한 인터페이스를 제공함으로써 코드의 가독성과 유지보수성을 높여줍니다. 특히 서브시스템이 복잡하고 여러 모듈이 상호작용해야 하는 상황에서 매우 유용합니다. 하지만 지나치게 단순화하거나 필요 이상으로 사용하지 않도록 주의해야 합니다.
6. 관련 링크
반응형
'Workspace > Design Pattern' 카테고리의 다른 글
ECS 패턴 (Entity-Component-System): 효율적이고 유연한 설계 패턴 (0) | 2025.01.24 |
---|---|
메멘토 패턴 (Memento Pattern): 객체의 상태를 안전하게 저장하고 복구하기 (0) | 2025.01.24 |
방문자 패턴 (Visitor Pattern): 유연한 확장을 돕는 디자인 패턴 (0) | 2025.01.24 |
책임 연쇄 패턴 (Chain of Responsibility): 요청 처리의 유연한 흐름 만들기 (0) | 2025.01.24 |
브리지 패턴 (Bridge Pattern): 구조를 분리해 유연성을 극대화하기 (0) | 2025.01.22 |