모름

퍼사드 패턴에 대해 생각해보았다.

 

최근에 여러 코드들을 봤는데 여기서 일관적인 공통점이 보였다. 퍼사드 패턴이었다. 퍼사드 패턴은 무엇이냐. 건물의 정면을 의미한다. 코드에 적용하면... 코드 구조의 정면을 구현하는 것이 바로 퍼사드 패턴이다. 이를 검색해보면 아래와 같이 설명되고있다.

 

어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다. 퍼사드 패턴에서는 서브 시스템을 더 쉽게 사용할 수 있게 해 주는 고수준 인터페이스를 정의합니다.
출처: https://welcomeheesuk.tistory.com/75

퍼사드 패턴은 GoF가 제시한 구조 패턴(Structural Pattern)중의 하나로 클라이언트에게 시스템의 복잡성(complexity)을 숨기고, 사용하기 편하도록 간단하고 구체적인 고수준의 인터페이스를 제공하는 패턴이다.
출처: https://www.coninggu.com/5

 

복잡하게 정의되어있지만, 아무래도 위와 같은 설명으로는 퍼사드 패턴을 이해하기가 힘들어 보인다. 우선 왜 퍼사드 패턴이어야 하는가 이런 부분에 대한 생각이 나름대로 정의가 되어야 하지 않을까.

 

그래서 생각해봤다.

내부가 예측되는 퍼사드(건물의 정면)

 

퍼사드, 공간의 정면은 왜 존재하는가? 우리는 하루에 수십 번 건물의 정면을 본다. 정면을 보면, 건물의 내부가 예측된다. 이것이 공간의 정면이 존재하는 이유가 아닐까. 지나가는 손님들에게 이 건물 내부는 이러할 것이니 맘 편하게 들어오세요... 이러면서..!

 

이렇게 생각하면, 코드 구조에서 사용되는 퍼사드 패턴도 마찬가지. 단순히 여러 클래스를 모아서 호출하기 위한 패턴이 아니라 코드 구조의 정면(퍼사드)이라는 책임을 씌우는 패턴이다. 개발자들아! 이 코드를 보면 코드 안 쪽에는 이러이러한 것들이 구현되어 있는 걸 알 수 있어! 그러니까 부담갖지 말고 들어와! 라는 소통을 위함일 것이다.

 

소프트웨어 내에서 우리는 코드로 많은 건물들을 짓는다. 하지만 내 경험을 살펴보면 정면을 잘 마감한 기억이 별로 없다. 난 그저 그리스 신전마냥 기둥만 우뚝 박혀있는 정문, 후문, 옆문없는 건물을 짓고 있었다.

코드를 이리 짜면, 어디서 부터 파악해야되나요?

위 건물을 보면 퍼사드 패턴이 가지는 강점이 보인다. 즉, 퍼사드 패턴의 코드 파악의 방향성을 제공하는 것이다. 위의 그리스 건물처럼 코드 구조가 짜여져 있으면, 인수인계받은 개발자는 과연 어디서부터 코드를 파악해나가야할까? 건물에 정문 하나 없는데 말이다.

 

퍼사드 패턴은 단지 한 곳에만 적용되는 것이 아니다. 소프트웨어의 여러 기능 집합들에 적용 된다. 즉, 소프트웨어를 개발 할 때 항상 신경써야만 한다.

 

객체지향을 배우면, 제일먼저 추상화라는 단어를 보고 듣고 배운다. 추상화를 이용하는 대표적인 예가 퍼사드 패턴 아닐까. 기능들을 잘 추상해내 한 건물에 집어넣고 정면을 꾸며내는 것. 하지만 추상이라는게 꽤 어렵고 고민스런 일이기 때문에 코드는 하나의 건물로서 마감되는 것이 아닌, 여러 건물을 가지는 마을, 도시 따위와 같이 된다.

 

한 사람이 마을, 도시를 어떻게 파악하겠어. 거기다 그리스 신전만 있는 도시라면 오마이갓. 미궁이 되는 것이다. 앞으로 내 코드는 적어도 마을과 도시 수준을 유지하도록 노력해봐야지...