이 책은 디자인 패턴을 처음 접하는 분들을 위한 책이기는 하지만, 디자인 패턴을 작성하는 방법을 이해하면 여러 가지 이점이 있습니다. 필요한 패턴의 저변에 깔린 논리를 더욱 깊게 이해할 수 있을 뿐 아니라, 패턴을 사용할지 여부를 판단할 때에, 이 패턴이 적절한지 여부를 검토하는 방법도 배울 수 있습니다.
좋은 패턴을 작성하기란 쉽지는 않습니다. 패턴을 작성하려면, 패턴을 사용하려는 유저에게 상당한 양의 레퍼런스를 제공해야 합니다. 예를 들면 패턴의 구조에서 언급했던 것들을 다 제공해야 합니다. 뿐만 아니라 패턴을 사용하는 것과 관련한 경험을 하나의 흐름으로 전달해줄 정도가 되어야 합니다. '패턴이란 무엇인가?' 부분을 읽기만 해도, 실무에서 패턴을 보면, 패턴임을 알아볼 수 있을 거라고 생각할지도 모릅니다. 하지만 오히려 정반대입니다. 여러분이 살펴보는 코드가 특정 패턴을 따르는 코드인지 여부를 구분하는 것은 쉽지 않습니다.
어떤 코드를 본다고 가정해보죠. 여러분은 이 코드가 기존의 특정 패턴을 따른다고 생각할 수도 있습니다. 하지만 실제로는 이 코드는 패턴을 전혀 따르지 않는 것일 수도 있습니다. 코드가 어떤 패턴을 따르는지 분석할 때, 많은 경우에는 코드가 좋은 원칙이나 디자인 관행을 따를 수도 있습니다. 이런 좋은 원칙이나 디자인 관행은 우연히 어떤 패턴의 규칙과 겹칠 수도 있습니다. 하지만 기억하세요. 내부에 상호작용과 정의된 규칙을 포함하지 않는 솔루션은 패턴이 아닙니다.
나만의 디자인 패턴을 작성하는 과정 자체에 관심이 있으시다면, 기존에 좋은 패턴을 만든 사람들에게서 배우기를 권합니다. 시간을 들여서, 패턴에 대한 책이나 패턴에 대해 기술한 문서를 살펴보고, 이 중에 여러분에게 의미있는 것을 흡수하세요. 이렇게 하면 여러분이 원하는 패턴 작성 능력에 근접할 수 있을 것입니다. 또한 기존의 패턴 중에 관심있는 패턴의 구조와 semantics를 자세히 살펴 보세요. 그리고 패턴을 조직하는 원리를 알아내 보세요.
패턴에 관한 지식을 충분히 흡수하였다면, 이제는 직접 패턴을 작성해 보세요. 기존의 패턴 포맷을 사용해서, 기존의 패턴을 향상시킬 방법은 없는지 아이디어를 생각해내 보세요. 아니면 기존의 패턴에 여러분의 아이디어를 통합시킬 방법은 없는지 고민해 보세요. 이렇게 한 사례로 크리스티안 하일만의 예를 들 수 있습니다. 하일만은 자바스크립트 개발자인데요, 기존의 패턴인 모듈 패턴을 근본적으로 바꾸어서 revealing module 패턴을 새로이 만들었습니다. (이 revealing module 패턴에 대해서는 이 책의 뒷부분에서 다루었습니다.)
직접 디자인 패턴을 작성해보고 싶으시다면, (그냥 디자인 패턴을 만드는 과정을 겪어보는 학습용 목적이라고 하더라도요), 몇 가지 팁을 드리겠습니다.
패턴 작성에 관한 팁
- 패턴의 실용성에 대해 자문하자 : 내가 작성하는 패턴이, 반복되는 문제에 대한 '검증된' 솔루션인지 자문해 보세요. 검증되지 않은, 단지 머릿속으로 추측만 해본 솔루션이어서는 안됩니다.
- 최고의 실천법에서 이끌어낸 패턴인지 자문하자 : 내가 사용하는 디자인 관련 선택은 최고의 실천법에 대한 이해에서 나온 원리에 기반하고 있어야 합니다.
- 디자인 패턴은 유저에게 투명해야 한다 : 디자인 패턴은 유저-경험이 어떤 유형인지에 상관없이 투명해야 합니다. 패턴은 패턴을 이용하는 개발자를 위한 것이며, 유저-경험에 관해 그 어떤 변화도 강요해서는 안됩니다. 즉, 패턴을 사용하지 않았을 때, 일어나지 않는 변화라면, 패턴을 사용해도 그 변화가 필요해서는 안됩니다.
- 패턴 디자인에 있어서, '독창성'은 핵심이 아니다 : 패턴을 작성할 때, 이 솔루션을 처음발견한 사람이 아니라도 상관없습니다. 다른 패턴의 사소한 일부와 겹치는 것에 대해서 걱정할 필요도 없습니다. 내가 작성한 패턴이 강력하고, 널리 쓰이기에 유용하다면, 충분히 좋은 패턴이라고 인정받을 수 있습니다.
- 패턴과 디자인 간의 차이에 대해 알아야 한다 : 디자인 패턴은 보통 검증된 최고의 사례에서 이끌어낸 것입니다. 그리고 솔루션을 설계하는 사람은 디자인 패턴을 일종의 모델로서 사용할 수 있습니다. 패턴이 하는 역할은 솔루션 설계자가 여러 가지 디자인 옵션 중에서 가장 나은 것을 선택하도록 안내해주는 것입니다.
- 내가 작성한 패턴에 강력한 예제들을 넣어두어야 한다 : 패턴에 대해서 잘 기술한 후에 좋은 예제를 덧붙여서, 패턴을 잘 사용했을 때, 어떻게 되는지를 보여주어야 합니다. 전반적인 사용방법을 보여주려는 경우에는, 좋은 디자인 원리를 보여주는 예제가 이상적입니다.
패턴을 작성할 때에는 보편적으로 적용되는 디자인, 특정 상황에 적용되는 디자인, 유용한 디자인, 이 셋 간에 균형점을 찾아야 합니다. 패턴을 작성하고 있다면, 가능한 광범위하게 적용되게 하세요. 그럼 괜찮은 패턴을 만들 수 있을 겁니다. 지금까지 패턴 작성에 관한 간략한 소개를 해 보았습니다. 이 책의 나머지 부분을 읽어나가면서 배우는데에 도움이 되기를 바랍니다.