Introduction to design patterns
디자인 패턴이란.
디자인 패턴이란 소프트웨어 디자인 과정에서 흔히, 공통적으로 발생하는 문제점들을 위한 정형화된 솔루션이다. 디자인 패턴의 개념은 크리스토퍼 알렉산더가 처음 언급하였지만, 소프트웨어 공학에 처음 도입한 사람들은 에릭 감마 외 4인방이다. 1994년, 이 4인방(GoF, Gang of Four)은 "Design Patterns: Elements of Reusable Object-Oriented Software"라는 책을 발행했고, 객체지향 프로그래밍에서 발생하는 여러 가지 문제들을 풀기 위한 23가지 패턴을 소개하였다.
이 책의 가치는 26년이 지난 현재에도 계속 언급되고 팔리고 있다는 것으로 반증될 것이다. 수십 년이 지난 현재에도 지난날의 프로그래밍과 크게 다르지 않고, 같은 문제로 많은 개발자들이 머리를 싸매고 있다. 디자인 패턴은 그러한 문제들을 세기의 천재들이 같이 고민하고 솔루션을 제시해주고 있다.
본인이 소프트웨어를 디자인하는데, 외국의 저명한 전문가가 그 문제에 대해서 조언을 해준다는데 누가 마다할까. 디자인 패턴은 누구나 고민할 수 있는, 누구나 마주칠 수 있는 문제 대한 솔루션을 담고 있다.
디자인 패턴을 써야 하는 이유.
사실 문제를 해결하는 데에 정답은 없다. 하지만 왕도는 존재할 수 있다. 굳이 굽이굽이 돌아가지 않아도, 쉽게 해결할 수 있다. 디자인 패턴은 이미 수없이 시도되었고, 검증된 솔루션이다. 같은 문제를 푸는데, 개발자가 직접 자신만의 솔루션을 고민하고 설계할 필요가 없다. 물론 그 방법이 더 좋은 결과를 가져올지 모르지만, 대개는 아니다. 동일한 문제에 대해 전문가들에 의해 검증된 솔루션을 사용하지 않을 이유가 없다.
다른 이유는 개발자 간의 커뮤니케이션 증진이다. 프레더릭 브룩스의 맨먼스 미신을 읽어본 적이 있는가? 개발자 간의 커뮤니케이션은 개발 속도에 지대한 영향을 미친다. 디자인 패턴은 정형화된 솔루션이면서 이미 매우 잘 알려진 솔루션이다. 디자인 패턴을 익히 알고 있는 팀원이라면 구구절절 우리 팀이 적용하려는 솔루션을 설명할 필요 없이 한 단어로 팀원에게 내가 생각하고 있는 솔루션을 전달할 수 있을 것이다. 공통된 언어를 사용함으로써 커뮤니케이션은 쉽고 간결해진다. 심지어 말이 잘 통하지 않는 외국인 동료와도 디자인 패턴 키워드 몇 마디로 지금 어떤 문제와 솔루션을 이야기하는지 캐치할 수 있다.
다시, 디자인 패턴이란?
어쨌든 디자인 패턴은 개발자로서 반드시 알아두어야 하는 개념이다. 실제 이를 완벽히 이해하는가, 적소적시에 적용할 수 있는가는 부차원적이고, 일단 팀원들과 의사소통은 가능해야 한다.
디자인 패턴은 구체적인 솔루션을 제공하지 않는다. 완벽히 같은 문제가 존재하지 않는 것처럼 완벽히 같은 솔루션은 존재하지 않는다. 다만 디자인 패턴은 솔루션의 실마리를 제공하며, 이를 적절히 활용하여 문제를 해결하는 것은 개발자의 몫이다. 한 문제를 해결하기 위해 한 가지 이상의 디자인 패턴을 활용할 수도 있다.
디자인 패턴을 공부할 땐, 특정 디자인 패턴이 생겨난 의도(Intent)와 동기(Motivation)에 집중하고, 해결방법과 구조(Structure)를 천천히 살펴보자. 의도와 동기를 모르면, 추후에 동일한 문제가 닥쳐도 공부한 디자인 패턴은 절대 떠오르지 않는다.
미켈란젤로의 아담의 창조
아담의 창조는 미켈란젤로의 프레스코 시스티나 예배당 천장에 그려진 벽화의 하나이다. 하나님이 최초의 인간 아담에게 생명을 불어넣은 창세기 속 성경 이야기를 그리고 있다. 글쓴이는 아담의 창조, 천지창조가 액자에 담겨있는 그림인 줄 알았다. 실제 시스티나 예배당을 방문하였을 때, 어느 방의 벽과 천장에 도배되어 있는 그림에 한 번 놀라고, 천장 빼곡히 칠해져 있는 그림 중 하나가 아담의 창조라는 것에 한 번 더 놀랐다.
1쇄. 2020.11.30.