본문 바로가기

study/design pattern

[디자인패턴][구조패턴] 퍼싸드 Facade - C++

728x90

[모던 C++ 디자인 패턴] 책을 바탕으로 공부하는 내용을 정리한 내용이다.


Facade pattern

퍼싸드(퍼사드)는 프랑스어로 출입구가 있는 건물의 앞부분을 말한다. 이번 패턴은 특이하게 터미널에 대한 이야기를 통해 설명을 진행한다.

먼저 운영 체제에서 제공하는 터미널/콘솔의 CLI와 금융권의 금융 데이터 문자 렌더링은 미묘한 차이가 있따.


터미널은 어떻게 동작할까?

터미널 윈도의 첫 번째 구성 요소는 버퍼다. 버퍼에 렌더링할 문자들이 저장된다. 버퍼는 보통 char/wchar_t 타입의 1차원 또는 2차원 배열로 만들어진다.

버퍼는 보통 현재의 입력 라인을 가리키는 어떤 표시를 갖는다. 그 표시를 이용해 버퍼가 가득 찼을 때, 항상 새로운 라인을 할당하는 것이 아니라 가장 오래된 라인부터 덮어쓰면서 새로운 데이터를 받아들인다.

다음으로 뷰포트(viewport)라는 것이 등장한다. 뷰포트는 버퍼의 특정 영역을 화면에 렌더링한다. 버퍼는 매우 커서 뷰포트는 버퍼의 작은 사각형 영역만 렌더링한다.

마지막으로 콘솔(터미널 윈도)이 있다. 콘솔은 뷰포트를 화면에 보여주고 사용자로부터 입력을 받는다. 콘솔은 퍼사드의 역할이다. 뒤에서 일어나는 복잡한 작업들을 단순화해 표현한다.


고급 터미널

운영 체제에서 제공하는 전형적인 터미널의 한 가지 문제는 대량 데이터를 파이핑해 출력할 때 대단히 느리다는 점이다. MS 윈도의 터미널 윈도는 GDI(Graphics Device Interface)를 이용해 문자를 렌더링해 느린데, 요즘같이 전용 그래픽 장치가 기본으로 존재하는 환경에서는 불필요하다. 빠른 처리가 필요한 금융 거래 환경에서는 하드웨어의 도움을 받아 렌더링을 한다. 문자들은 사전에 렌더링된 텍스처로 표현돼 OpenGL과 같은 그래픽 하드웨어용 API로 화면에 출력된다.

거래 터미널은 여러 버퍼와 뷰포트로 이루어지는데, 여러 거래, 교환 데이터들이 동시에 서로 다른 버퍼에서 업데이트 된다. 이 모든 정보가 하나의 화면에 표현되어야 한다.


퍼싸드는 어디에 있는가?

위에서 언급되어 온 금융 거래 시스템에서는 콘솔 자체가 퍼싸드다. 콘솔 내부에서 많은 수의 서로 다른 뷰포트가 동작한다.

콘솔의 초기화 작업은 일반적으로 대단히 복잡하다. 그럼에도 불구하고 콘솔은 퍼싸드이기 때문에 최대한 편리한 API를 제공하기 위해 노력해야 한다. 이를 위해 콘솔 내부의 모든 구성 요소를 초기화하는데 필요한 파라미터들을 직관적으로 이해하기 쉽게 정의한다.

다른 방법으로 모든 파라미터는 객체 하나에 묶어서 전달할 수도 있다. 이렇게 하면 파라미터들의 적절한 디폴트 값을 한 곳에서 관리할 수 있다.


요약

퍼싸드 디자인 패턴은 하나 이상의 복잡한 서브 시스템 앞에 단순한 인터페이스를 두기 위한 방법이다. 복잡한 콘솔이든 단일 버퍼와 단일 뷰포트만 존재하는 단순한 콘솔이든, 편리하고 직관적인 API로 이용할 수 있게 하는 것이라 할 수 있다.

 

이번 내용은 코드가 거의 없었다. 복잡한 내부 구조를 외부에는 단순한 API로 쉽게 사용할 수 있게 해주는 패턴이라는 것만 알고 가면 될 것 같다.

728x90