[디자인 패턴] 퍼사드 패턴 (Facade Pattern)

oy Hong·2024년 4월 14일

기술

목록 보기
17/23

퍼사드 패턴 (Facade Pattern)

퍼사드는 앱의 전반적인 복잡성을 줄이는 동시에 원치 않는 의존성들을 한 곳으로 옮기기 위해 사용되는 구조 디자인 패턴이다.


장단점

장점

  • 복잡한 시스템으로부터 간단한 인터페이스를 만들 수 있다.
  • 인터페이스의 분리를 통해 클라이언트와 실제 역할을 하는 클래스간 결합도를 낮출 수 있다.

단점

  • 퍼사드 클래스가 지나치게 비대해 질 경우 유지보수가 좋지 않다.
  • 사용자에게 하위 클래스(일을 하는 클래스)를 완전히 숨길 수는 없다.

코드 예시

	public class Facade
    {
        protected Subsystem1 _subsystem1;
        
        protected Subsystem2 _subsystem2;

        public Facade(Subsystem1 subsystem1, Subsystem2 subsystem2)
        {
            this._subsystem1 = subsystem1;
            this._subsystem2 = subsystem2;
        }

		// 클래스들을 조합해 작업을 처리
        public string Operation()
        {
            string result = "Facade initializes subsystems:\n";
            result += this._subsystem1.operation1();
            result += this._subsystem2.operation1();
            result += "Facade orders subsystems to perform the action:\n";
            result += this._subsystem1.operationN();
            result += this._subsystem2.operationZ();
            return result;
        }
    }

    public class Subsystem1
    {
        public string operation1()
        {
            return "Subsystem1: Ready!\n";
        }

        public string operationN()
        {
            return "Subsystem1: Go!\n";
        }
    }

    public class Subsystem2
    {
        public string operation1()
        {
            return "Subsystem2: Get ready!\n";
        }

        public string operationZ()
        {
            return "Subsystem2: Fire!\n";
        }
    }


    class Client
    {
        public static void ClientCode(Facade facade)
        {
            Console.Write(facade.Operation());
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Subsystem1 subsystem1 = new Subsystem1();
            Subsystem2 subsystem2 = new Subsystem2();
            Facade facade = new Facade(subsystem1, subsystem2);
            Client.ClientCode(facade);
        }
    }

출력
Facade initializes subsystems:
Subsystem1: Ready!
Subsystem2: Get ready!
Facade orders subsystems to perform the action:
Subsystem1: Go!
Subsystem2: Fire!

0개의 댓글