개념공부

디자인 패턴 : 파사드 패턴

Cadi 2025. 1. 9. 14:17

Facade Pattern  : 사용하기 복잡한 클래스 라이브러리에 대해 사용하기 편한 인터페이스를 구성하기 위한 패턴

특정한 기능들을 묶어두거나, 생성에 특정한 로직을 추가하는 것이 아닌 '정리'를 위한 패턴이라고 이해 하는 것이 편함.

출처 : INPA Dev

퍼사드는 하위시스템 클래스들을 캡슐화 하는 것이 아니라, 서브 시스템들을 사용할 간단한 인터페이스를 제공하는 것

사용자가 서브 시스템 내부의 클래스를 직접 제한하는 것을 막을 수는 없다. 

 

예시 코드 

using System;

public class Amplifier
{
    public void On() => Console.WriteLine("Amplifier: On");
    public void Off() => Console.WriteLine("Amplifier: Off");
}

public class DVDPlayer
{
    public void Play(string movie) => Console.WriteLine($"DVD Player: Playing \"{movie}\"");
    public void Stop() => Console.WriteLine("DVD Player: Stopped");
}

public class Screen
{
    public void Lower() => Console.WriteLine("Screen: Lowered");
    public void Raise() => Console.WriteLine("Screen: Raised");
}

// Facade
public class HomeTheaterFacade
{
    private Amplifier amplifier;
    private DVDPlayer dvdPlayer;
    private Screen screen;

    public HomeTheaterFacade(Amplifier amp, DVDPlayer dvd, Screen scr)
    {
        amplifier = amp;
        dvdPlayer = dvd;
        screen = scr;
    }

    public void WatchMovie(string movie)
    {
        Console.WriteLine("Get ready to watch a movie...");
        screen.Lower();
        amplifier.On();
        dvdPlayer.Play(movie);
    }

    public void EndMovie()
    {
        Console.WriteLine("Shutting down the theater...");
        dvdPlayer.Stop();
        amplifier.Off();
        screen.Raise();
    }
}

// Client
class Program
{
    static void Main()
    {
        var amp = new Amplifier();
        var dvd = new DVDPlayer();
        var screen = new Screen();

        var homeTheater = new HomeTheaterFacade(amp, dvd, screen);
        homeTheater.WatchMovie("Inception");
        homeTheater.EndMovie();
    }
}

 

장점

  • 단순화 : 서브시스템을 간결한 인터페이스로 감싸 복잡성을 줄인다.
  • 유연성 : 서브시스템 내부를 변경해도 퍼서드를 통해 사용하는 코드는 영향 X
  • 느슨한 결합 : 클라이언트 코드와 서브시스템 간의 의존도가 낮아짐

단점

  • 결국 새로운 계층이 생기는 것 > 관리해야할 코드 추가
  • 서브시스템의 모든 기능들을 파사드가 관리하지 못할 경우, 결국 클라이언트가 직접 접근

결국 퍼사드 패턴의 목적은 '단순화된 진입', '정리'라고 생각한다. 




참조 
https://inpa.tistory.com/entry/GOF-%F0%9F%92%A0-%ED%8D%BC%EC%82%AC%EB%93%9CFacade-%ED%8C%A8%ED%84%B4-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90

 

💠 퍼사드(Facade) 패턴 - 완벽 마스터하기

Facade Pattern 퍼사드 패턴(Facade Pattern)은 사용하기 복잡한 클래스 라이브러리에 대해 사용하기 편하게 간편한 인터페이스(API)를 구성하기 위한 구조 패턴 이다. 예를들어 라이브러리의 각 클래스

inpa.tistory.com

https://refactoring.guru/ko/design-patterns/facade

 

퍼사드 패턴

/ 디자인 패턴들 / 구조 패턴 퍼사드 패턴 다음 이름으로도 불립니다: Facade 의도 퍼사드 패턴은 라이브러리에 대한, 프레임워크에 대한 또는 다른 클래스들의 복잡한 집합에 대한 단순화된 인터

refactoring.guru