파사드 (Facade) 패턴 구조 패턴
복잡한 객체 구조에 대한 간략화된 인터페이스를 클라이언트에게 제공합니다.
어는 날 당신은 파일럿이 되어 비행기를 이륙시키기 위해 비행기에 탑승했다. 당신은 엔진에 직접 라이터로 불을 붙여 시동을 켜고, 어느 정도 속력이 붙었을 즈음 직접 수평 꼬리 날개를 당겨 비행기를 이륙시켰다. 이번엔 상공에서 천천히 좌회전을 하겠다. 당신은 수직 꼬리 날개를 회전 방향으로 천천히 당겨서... 무언가 좀 이상하지 않은가? 그렇다. 파일럿이 탔던 비행기는 조종석이 없었던 것이다. 그래서 파일럿은 비행기의 모든 구성 요소에 대한 제어를 일일이 하고 있었다. 이래서야 제대로 된 비행은 커녕 목숨을 부지하기도 어려울 것이다.
다시 처음부터 시작해 보자. 이번엔 조종석이 있는 비행기이다. 당신은 조종석에 착석하여 Engine On 버튼을 누르니 엔진이 저절로 점화되어 시동이 켜지고, 조종간을 당기니 수평 꼬리 날개가 저절로 당겨져 비행기가 이륙했다. 당신은 가만히 조종석에 앉아 조종간만 조작해도 비행기를 어느 방향으로든지 꺾을 수 있게 되었다.
프로그래머는 살면서 많은 객체 구조를 만들거나 접할 것이다. 마치 위에서 이야기했던 비행기처럼. 다양하게 세분화된 객체에 대해 직접 이해하고 접근하는것은 난해하고 복잡할 것이다. 이것은 객체 구조에 대한 표면(Facade)을 정의하는, 비행기의 조종석과도 같은 파사드(Facade) 패턴을 이용하여 해결할 수 있다. 파사드 객체는 클라이언트를 대신하여 객체들과 상호 작용하며, 객체들을 통합시킨 간략한 인터페이스를 클라이언트에게 제공한다.
파사드 패턴을 이용하면 복잡한 라이브러리를 이해하기 쉽고 간편하게 사용할 수 있고, 클라이언트가 내부 구조에 의존하지 않고 파사드 객체를 통해 객체 구조를 제어할 수가 있어 코드의 유연성이 향상된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | public class PatternFacade { public class ClassA { public void Operate() { Console.WriteLine("Operating ClassA"); } } public class ClassB { public void Operate() { Console.WriteLine("Operating ClassB"); } } public class ClassC { public void Operate() { Console.WriteLine("Operating ClassC"); } } public class Facade { private ClassA _classA; private ClassB _classB; private ClassC _classC; public Facade(ClassA classA, ClassB classB, ClassC classC) { _classA = classA; _classB = classB; _classC = classC; } public void OperateClassA() { _classA.Operate(); } public void OperateClassB() { _classB.Operate(); } public void OperateClassC() { _classC.Operate(); } } public static void Main(string[] args) { ClassA classA = new ClassA(); ClassB classB = new ClassB(); ClassC classC = new ClassC(); Facade facade = new Facade(classA, classB, classC); facade.OperateClassA(); facade.OperateClassB(); facade.OperateClassC(); } } | cs |
1 2 3 4 | Operating ClassA Operating ClassB Operating ClassC Press any key to continue . . . | cs |
세부 객체인 ClassA, ClassB, ClassC 를 파사드 객체가 참조하여 세부 객체들의 Operate() 함수에 대한 인터페이스를 클라이언트에게 제공하였다.
'PROGRAMMING > Design Pattern' 카테고리의 다른 글
[GoF] 추상 팩토리 (Abstract Factory) 패턴 (0) | 2019.03.09 |
---|---|
[GoF] 경량 (Flyweight) 패턴 (0) | 2019.03.09 |
[GoF] 데코레이터 (Decorator) 패턴 (0) | 2019.03.09 |
[GoF] 컴포지트 (Composite) 패턴 (0) | 2019.03.09 |
[GoF] 브릿지 (Bridge) 패턴 (0) | 2019.03.09 |