1.6.2 패턴 및 패턴 언어
패턴은 특정한 상황에서 발생한 문제에 대한 재사용 가능한 해법입니다. 실제로 소프트웨어 아키텍처 및 설계 분야에서 이미 검증된 유용한 아이디어입니다. 패턴 언어는 특정 영역 내부에서 문제를 해결하는 연관된 패턴의 집합입니다. 패턴과 패턴 언어는 크리스토퍼 알렉산더(Christopher Alexander)라는 아키텍트가 실제로 정립한 개념입니다. 그는 253개의 패턴으로 구성된 아키텍처 패턴 언어를 <패턴 랭귀지(A Pattern Language: Towns, Buildings, Construction)>(인사이트, 2013)에 담았습니다. 도시 위치를 선정하는 고수준의 문제(“마실 물은 어떻게 가져오나”)부터 방을 설계하는 저수준의 문제(“모든 방은 두 면에 빛을 비춘다”)까지 다양한 문제를 해결하는 패턴을 이용하여 도시에서 창문에 이르기까지 물리적인 사물을 배치하는 문제를 해결했습니다.
크리스토퍼 알렉산더가 쓴 글은 소프트웨어 커뮤니티에 큰 반향을 불러일으켰고 결국 패턴, 패턴 언어 개념을 차용하기에 이르렀습니다. <GoF의 디자인 패턴: 재사용성을 지닌 객체지향 소프트웨어의 핵심요소(Design Patterns: Elements of Reusable Object-Oriented Software)>(에릭 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랠프 존슨(Ralph Johnson), 존 블리사이즈(John Vlissides) 저, 프로텍미디어, 2015)는 객체 지향 디자인 패턴을 집대성한 명저입니다. 이 책을 계기로 소프트웨어 개발자 세계에 패턴이 널리 보급되었고, 1990년대 중반부터 소프트웨어 개발자들은 다양한 소프트웨어 패턴을 문서화하기 시작했습니다. 덕분에 소프트웨어 아키텍처 및 설계에 관한 다양한 문제를 패턴에 따라 소프트웨어 엘리먼트를 결합하여 해결할 수 있게 되었죠.