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
- 느슨한 결합 : 클라이언트 코드와 서브시스템 간의 의존도가 낮아짐
단점
- 결국 새로운 계층이 생기는 것 > 관리해야할 코드 추가
- 서브시스템의 모든 기능들을 파사드가 관리하지 못할 경우, 결국 클라이언트가 직접 접근
결국 퍼사드 패턴의 목적은 '단순화된 진입', '정리'라고 생각한다.
💠 퍼사드(Facade) 패턴 - 완벽 마스터하기
Facade Pattern 퍼사드 패턴(Facade Pattern)은 사용하기 복잡한 클래스 라이브러리에 대해 사용하기 편하게 간편한 인터페이스(API)를 구성하기 위한 구조 패턴 이다. 예를들어 라이브러리의 각 클래스
inpa.tistory.com
https://refactoring.guru/ko/design-patterns/facade
퍼사드 패턴
/ 디자인 패턴들 / 구조 패턴 퍼사드 패턴 다음 이름으로도 불립니다: Facade 의도 퍼사드 패턴은 라이브러리에 대한, 프레임워크에 대한 또는 다른 클래스들의 복잡한 집합에 대한 단순화된 인터
refactoring.guru
'개념공부' 카테고리의 다른 글
디자인 패턴 : 비지터 패턴 (Visitor Pattern) (0) | 2025.01.10 |
---|---|
디자인 패턴 : 프록시 패턴 (Proxy Pattern) (0) | 2025.01.10 |
디자인 패턴 : 컴포지트 패턴 (0) | 2025.01.09 |
디자인 패턴 : 중재자 패턴 (0) | 2025.01.08 |
디자인 패턴 : 연쇄 책임 패턴 (Chain Of Responsibility) (0) | 2025.01.08 |