Tag Archives: Design Pattern

Vocabulary Words

더글라스 슈미트 교수는 패턴을 인간 언어의 ‘사전 단어(vocabulary words)’와 유사하다고 이야기 하고 있다. 우리가 사용하는 일반 언어에서 ‘단어’의 쓰임은 어떤 실체가 이미 존재하는 상황에서 해당 실체에 대한 명칭을 부여하기 위해서다. 즉, 단어의 명명에 의해 본래의 의미가 정의되는 것이 아닌, 본래의 고정된 의미가 이미 존재하는 상황에서 해당 의미에 이름을 붙인 것이 단어이다. 그리고 소프트웨어의 개발에서 의미하는 패턴 역시 그러하다.

따라서 패턴이란 소프트웨어 개발자가 설계를 비롯한 전반적인 소프트웨어 개발 프로세스 상에서 상호 간에 의사소통을 돕고 빠른 구조 파악 및 구축을 이끄는 중요한 용어로 사용된다. 그리고 이렇게 일반적인 쓰임이 가능한 이유는 반복적으로 나타나는 일반적 설계 요소의 특징을 분명히 분류하고 추상화해 명명했기 때문이다. 기억하고 공유하고 사용하기 위해서라도 이런 명칭의 부여는 유용한 접근이다.

하지만 여기서 간과해서는 안되는 부분은 이런 패턴은 단순히 일반화된 속성을 투영해 명칭을 붙였을 뿐이고, 그 자체가 고유한 의미를 새롭고 독립적으로 형성하는 것은 아니라는 점이다. 결국 패턴이라는 용어가 모르는 상태에서 작성된 코드에서도 잘 조직된 패턴의 관계를 발견할 수 있고, 서로 다른 이름의 패턴이라 하더라도 결국 같은 설계 요소 및 제약사항을 의미할 수 있다.

패턴은 의사소통이나 자기 학습의 측면에서 유용하지만 그 자체 만으로 완전하고 유일할 수 없다. 패턴은 잘 짜여진 소프트웨어의 특정 컨텍스트에서 반복해 나타나는 요소를 명명한 결과일 뿐이기 때문에, 패턴이 일컷는 구조적 특징이 어떤 맥락에서 어떤 문제를 해결하기 위함인지에 대한 이유를 명확히 이해하지 않으면 의미가 없다. 그렇기 때문에 수 많은 패턴들 간의 관계를 미묘한 수준까지 분류하며 구분짓고 암기하려 노력하기 보다는, 그 이면에 숨은 소프트웨어 공학적 원칙의 적용과 그러한 적용의 이유에 대한 파악에 초점을 맞춰야 한다.

물론 패턴은 중요하다. 패턴은 개발자에게 필수적인 설계 지식이 누적된 요체이며, 개인의 측면에선 열심히 이해하고 익히고 적용하려 노력할 만한 가치가 충분하다. 하지만 함께 자리한 모든 사람들 간에 공유되지 않은 용어를 진리인냥 홀로 내뱉으며 우쭐함을 즐기고 있지는 않은지, 자신의 설계가 패턴에만 의존해 자신만의 창의적인 아이디어가 실종되진 않았는지 되짚어 볼 일이다.