퍼사드(Facade) 패턴
2024. 10. 14. 04:55ㆍDesign Pattern
퍼사드 패턴(Facade) - C#에서의 활용
퍼사드 패턴(Facade Pattern)은 복잡한 시스템의 내부 동작을 단순하게 표현하는 인터페이스를 제공하는 디자인 패턴입니다. 여러 클래스나 서브시스템 간의 복잡한 상호작용을 단순한 인터페이스로 감싸서, 사용자가 시스템의 세부사항을 몰라도 쉽게 사용할 수 있게 만듭니다.
1. 퍼사드 패턴이란?
퍼사드 패턴은 복잡한 시스템을 간단한 인터페이스로 감싸는 디자인 패턴입니다. 복잡한 클래스나 메서드 호출을 내부적으로 감추고, 클라이언트에게는 단순한 접근 포인트만을 제공합니다. 이를 통해 시스템의 복잡도를 줄이고, 유지보수성을 높일 수 있습니다.
2. 퍼사드 패턴 구조
퍼사드 패턴은 다음과 같은 구조로 구성됩니다.
- Facade(퍼사드): 서브시스템의 복잡한 기능을 감싸는 인터페이스 역할을 합니다.
- Subsystem Classes(서브시스템 클래스): 퍼사드가 감싸는 복잡한 클래스들이며, 실제 비즈니스 로직을 처리합니다.
- Client(클라이언트): 퍼사드 인터페이스를 사용하여 시스템을 간단하게 접근하는 사용자입니다.
3. 퍼사드 패턴 예제
3.1 서브시스템 클래스 정의
// 서브시스템 클래스 1 - 오디오 설정
public class AudioSystem
{
public void SetVolume(int level)
{
Console.WriteLine($"Audio volume set to {level}");
}
public void Mute()
{
Console.WriteLine("Audio muted");
}
}
// 서브시스템 클래스 2 - 비디오 설정
public class VideoSystem
{
public void SetResolution(string resolution)
{
Console.WriteLine($"Resolution set to {resolution}");
}
public void SetBrightness(int level)
{
Console.WriteLine($"Brightness set to {level}");
}
}
// 서브시스템 클래스 3 - 게임 설정
public class GameSystem
{
public void StartGame()
{
Console.WriteLine("Game started");
}
public void EndGame()
{
Console.WriteLine("Game ended");
}
}
3.2 퍼사드 클래스 정의
// Facade 클래스
public class HomeTheaterFacade
{
private AudioSystem _audio;
private VideoSystem _video;
private GameSystem _game;
public HomeTheaterFacade(AudioSystem audio, VideoSystem video, GameSystem game)
{
_audio = audio;
_video = video;
_game = game;
}
public void StartMovieNight()
{
_audio.SetVolume(5);
_video.SetResolution("1080p");
_video.SetBrightness(70);
_game.StartGame();
Console.WriteLine("Movie night started!");
}
public void EndMovieNight()
{
_audio.Mute();
_game.EndGame();
Console.WriteLine("Movie night ended.");
}
}
3.3 퍼사드 패턴 사용
class Program
{
static void Main(string[] args)
{
// 서브시스템 인스턴스 생성
AudioSystem audio = new AudioSystem();
VideoSystem video = new VideoSystem();
GameSystem game = new GameSystem();
// 퍼사드 인스턴스 생성
HomeTheaterFacade homeTheater = new HomeTheaterFacade(audio, video, game);
// 단순한 인터페이스로 복잡한 동작 실행
homeTheater.StartMovieNight();
homeTheater.EndMovieNight();
}
}
출력 결과:
Audio volume set to 5
Resolution set to 1080p
Brightness set to 70
Game started
Movie night started!
Audio muted
Game ended
Movie night ended.
4. 퍼사드 패턴의 장점
- 사용의 간소화: 복잡한 서브시스템을 단일 인터페이스로 감싸서, 클라이언트가 쉽게 사용할 수 있게 합니다.
- 클래스 간 결합도 감소: 클라이언트는 서브시스템의 복잡한 세부사항을 몰라도 되므로, 시스템 간의 결합도를 낮춥니다.
- 코드 가독성 향상: 간단한 퍼사드 인터페이스를 통해, 코드의 가독성과 유지보수성이 개선됩니다.
5. 퍼사드 패턴의 단점
- 서브시스템의 기능이 감춰짐: 퍼사드 패턴을 너무 많이 사용하면 서브시스템의 세부 기능에 대한 접근이 어려워질 수 있습니다.
- 추가적인 계층: 퍼사드를 구현하는 것은 추가적인 클래스 계층을 도입하는 것이므로, 간단한 시스템에는 오히려 복잡도를 증가시킬 수 있습니다.
6. 퍼사드 패턴의 활용 사례
퍼사드 패턴은 다양한 응용 분야에서 유용하게 사용됩니다.
- 복잡한 서브시스템의 관리: 대규모 애플리케이션에서 여러 서브시스템을 관리할 때, 퍼사드를 통해 통합된 인터페이스를 제공하여 복잡성을 줄일 수 있습니다.
- 라이브러리 사용: 서드파티 라이브러리의 복잡한 기능을 감싸서, 개발자가 사용하기 쉽도록 인터페이스를 제공하는 데 유용합니다.
- 게임 개발: 게임의 여러 하위 시스템(오디오, 그래픽, 입력 등)을 퍼사드로 감싸서 간단하게 제어할 수 있습니다.
7. 퍼사드 패턴과 유사한 패턴
- 어댑터 패턴(Adapter Pattern): 기존 인터페이스를 새로운 인터페이스로 변환하여 호환성을 제공하는 패턴으로, 퍼사드 패턴과 유사하지만 목적이 다릅니다.
- 싱글톤 패턴(Singleton Pattern): 단일 인스턴스만을 제공하는 패턴으로, 퍼사드 패턴과 결합하여 시스템 내에서 하나의 퍼사드 인스턴스만을 유지할 수 있습니다.
퍼사드 패턴은 복잡한 서브시스템을 간단한 인터페이스로 감싸서 사용자가 쉽게 접근할 수 있도록 돕는 강력한 도구입니다. 특히 대규모 시스템에서 서브시스템 간의 복잡한 의존성을 줄이고, 사용성을 향상시키는 데 유용합니다.
'Design Pattern' 카테고리의 다른 글
전략(Strategy) 패턴 (0) | 2024.10.14 |
---|---|
상태(State) 패턴 (0) | 2024.10.14 |
데코레이터(Decorator) 패턴 (1) | 2024.10.14 |
어댑터(Adapter) 패턴 (1) | 2024.10.12 |
빌더(Builder) 패턴 (0) | 2024.10.10 |