퍼사드(Facade) 패턴

2024. 10. 14. 04:55Design Pattern

퍼사드 패턴(Facade) - C#에서의 활용

퍼사드 패턴(Facade Pattern)은 복잡한 시스템의 내부 동작을 단순하게 표현하는 인터페이스를 제공하는 디자인 패턴입니다. 여러 클래스나 서브시스템 간의 복잡한 상호작용을 단순한 인터페이스로 감싸서, 사용자가 시스템의 세부사항을 몰라도 쉽게 사용할 수 있게 만듭니다.


1. 퍼사드 패턴이란?

퍼사드 패턴은 복잡한 시스템을 간단한 인터페이스로 감싸는 디자인 패턴입니다. 복잡한 클래스나 메서드 호출을 내부적으로 감추고, 클라이언트에게는 단순한 접근 포인트만을 제공합니다. 이를 통해 시스템의 복잡도를 줄이고, 유지보수성을 높일 수 있습니다.


2. 퍼사드 패턴 구조

퍼사드 패턴은 다음과 같은 구조로 구성됩니다.

  1. Facade(퍼사드): 서브시스템의 복잡한 기능을 감싸는 인터페이스 역할을 합니다.
  2. Subsystem Classes(서브시스템 클래스): 퍼사드가 감싸는 복잡한 클래스들이며, 실제 비즈니스 로직을 처리합니다.
  3. 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. 퍼사드 패턴의 장점

  1. 사용의 간소화: 복잡한 서브시스템을 단일 인터페이스로 감싸서, 클라이언트가 쉽게 사용할 수 있게 합니다.
  2. 클래스 간 결합도 감소: 클라이언트는 서브시스템의 복잡한 세부사항을 몰라도 되므로, 시스템 간의 결합도를 낮춥니다.
  3. 코드 가독성 향상: 간단한 퍼사드 인터페이스를 통해, 코드의 가독성과 유지보수성이 개선됩니다.

5. 퍼사드 패턴의 단점

  1. 서브시스템의 기능이 감춰짐: 퍼사드 패턴을 너무 많이 사용하면 서브시스템의 세부 기능에 대한 접근이 어려워질 수 있습니다.
  2. 추가적인 계층: 퍼사드를 구현하는 것은 추가적인 클래스 계층을 도입하는 것이므로, 간단한 시스템에는 오히려 복잡도를 증가시킬 수 있습니다.

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