Software Develop/Design Pattern

파사드 패턴 (Facade Pattern)

jaywapp 2023. 1. 12. 20:54

파사드 패턴(Facade Pattern)이란?

이번엔 Facade Pattern(파사드 패턴)에 대해 정리하고자 한다. Facade의 사전적 의미는 '건물의 정면'이라는 뜻이다. 그 뜻처럼 파사드 패턴은 하나의 시스템을 건물이라 생각한다면 사용자는 건물의 정면을 바라보고 이를 제어하는 방식을 나타낸다.

구성

Facade 패턴 구조도

System

복잡한 기능과 데이터를 구성한다. 

Facade 객체

System을 직접 제어한다. 복잡한 기능들을 복합적으로 사용하지만 Client에게는 간단하게 기능을 제공한다.

Client

Facade 객체를 통해 System을 사용 및 제어한다.

특징

- 코드의 간결성 (가독성)

- Client가 System을 다루기에 더욱 단순하게 사용 가능

 

예시

파사드 패턴의 사용을 식당의 운영에 빗대어 예시를 구현해보고자 한다. 전체 System이 식당이라면 음식을 만드는 부엌과 냉장고는 Subsystem (구조도상의 System)이고, 식당을 찾은 손님은 Client가 될 것이다. 손님은 식당에 찾아 카운터에서 음식을 주문하는데 이때 Counter의 역할이 Facade 객체가 될 것이다.

 

손님이 카운터에서 달걀프라이를 하나 주문하는 상황이라고 하자.

Kitchen

부엌에서는 달걀프라이를 요리하는 모든 과정들이 정의되어 있다.

public class Kitchen
{
    public void TurnOnGasRange() => Console.WriteLine("Turning On Gas Range");
    public void PutOnPan() => Console.WriteLine("Putting On Pan");
    public void BreakEgg() => Console.WriteLine("Breaking Egg");
    public void Fry() => Console.WriteLine("Fry");
}

Refrigerator

냉장고에서는 달걀을 꺼내는 행위가 정의되어 있다.

public class Refrigerator
{
    public void GetEgg() => Console.WriteLine("Getting Egg");
}

Counter

카운터에서는 달걀프라이를 주문하는 과정이 정의되어 있다. Client는 Counter의 OrderEggFried 함수를 사용할 수 있다.

public class Counter
{
    public void OrderEggFried()
    {
        var kitchen = new Kitchen();
        var refrigerator = new Refrigerator();

        kitchen.TurnOnGasRange();
        kitchen.PutOnPan();
        refrigerator.GetEgg();
        kitchen.BreakEgg();
        kitchen.Fry();
    }
}

Result

출력 결과