본문 바로가기

Coding Note

[Design pattern] Facade

Facade pattern : '입면'이란 뜻의 facade가 의미하듯, 복잡한 구조의 인터페이스를 평면적인 구조의 인터페이스로 보다 간결하게 나타내주는 패턴. 3차원의 물체의 입면을 그려 물체를 개략적으로 표현하듯, 복잡한 서브시스템을 간단한 인터페이스로서 표현하기때문에 사용하는측에서는 보다 간결한 코드로 원하는 동작을 수행할 수 있다.


'복잡한 서브시스템' => '간결한 인터페이스'  라고 본다면 Adapter pattern과 비슷하다. 하지만 Adapter는 하나의 기능을 다른 모듈에 적용할 수 있게 재구성한다는 개념이고 Facade는 복잡한 인터페이스를 간단한 인터페이스로 재구성하는 개념이다. 조금 차이가 있다.


사실 Facade pattern이 정말 디자인패턴인가 라는 의문이 든다. 코딩을 하는게 잘게잘게 만들어놓은 기능들로 하나의 시스템을 구성하는것인데, 이것을 패턴이라 두니 조금 당황스럽긴 하다(내가 Design pattern의 정의를 잘못 알고있는게 아닐까?).



프레임을 관리하는 클래스가 있을때, 맵, 몬스터들, 캐릭터들, 등등....  에 대한 draw()를 일일이 호출하는 번거로움 없이, FrameManager의 draw()를 호출해주므로써 일련의 처리과정을 간단하게 끝낼 수 있다.


이런 순차적인 작업외에도 사용하기 까다로운 클래스의 경우 원하는 작업만을 담당해주는 인터페이스로 간결하게 나타내주는 용도로도 Facade pattern이 적용될 수 있다. 예를들면 c++의 time같은 함수는 원하는 형식의 시간을 가져올때 이것저것 신경써줘야 할게 많은데, 이를


//c++ 클래스

class DateFormat{

char* getYYMMDD(){..}

char* getYYMMDD_HHMMSS(){..}

};


같이 원하는 형식으로 만들어주도록 할수도 있다.


느끼겠지만, Facade 구조가 심해질수록 원하는 기능을 위한 껍데기가 많아지게되며 퍼포먼스는 그만큼 감소한다. 하지만 OOP의 목적은 퍼포먼스가 아닌 코드의 캡슐화와 은닉, 확장,,,,,  으음..  


한줄요약 : 복잡한 구조는 간단하게 표현하자.

'Coding Note' 카테고리의 다른 글

[Design pattern] Proxy  (1) 2013.03.07
[Design pattern] Flyweight  (3) 2013.03.05
[Design pattern] Decorator  (0) 2013.03.03
[Design pattern] Composite  (0) 2013.03.03
[Design pattern] Bridge  (0) 2013.02.20