Design pattern
디자인 패턴(Design pattern)은 건축학 및 컴퓨터 과학에서 사용되는 용어로, 특정 영역의 설계의 문제를 해결하기 위해 고안된 형식적인 방법이다. 이 방식은 건축가 크리스토퍼 알렉산더가 건축학 영역에서 고안된 것을 그 시초로 하며, 이후 컴퓨터 과학 등 여러 다른 분야에서도 받아들여지게 되었다. 여러 구체적인 영역에서 관련을 맺으며 사용될 수 있는 패턴들을 구조적으로 정리한 것을 패턴 언어라 부른다.
《디자인 패턴》(Design Patterns, ISBN 0201633612)은 소프트웨어 설계에 있어 공통된 문제들에 대한 표준적인 해법과 작명법을 제안한 책이다. 이 분야의 사인방(Gang of Four, 줄여 GoF)으로 불리는 에리히 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리시데스(John Vlissides)가 같이 썼고, 한국어 판은 김정아의 번역으로 피어슨 에듀케이션 코리아를 통해 출판되었다. 책의 첫 번째 반절은 다양한 디자인 패턴의 정의에 할애하고 있고, 나머지 반절은 실제적으로 유용한 디자인 패턴들을 나열하고 있다. 책의 예제들은 객체지향적인 언어인 C++과 스몰토크로 제시되고 있다.
각 영역에서 관련된 패턴들을 구조적으로 정리한 것을 패턴 언어라 부른다.
컴퓨터 과학에서의 디자인 패턴
소프트웨어 개발 방법에서 사용되는 디자인 패턴은, 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나로, 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다. 알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만, 특정한 상황에서 구조적인 문제를 해결하는 방식을 설명해 준다.
이 용어를 소프트웨어 개발 영역에서 구체적으로 처음 제시한 곳은, GoF(Gang of Four)라 불리는 네명의 컴퓨터 과학 연구자들이 쓴 서적 'Design Patterns: Elements of Reusable Object-Oriented Software'(재이용 가능한 객체지향 소프트웨어의 요소 - 디자인 패턴)이다. GoF는 컴퓨터 소프트웨어 공학 분야의 연구자인 에릭 감마, 리차드 헬름, 랄프 존슨, 존 블리시디스의 네명을 지칭한다.
소프트웨어의 디자인 패턴에 대한 상세한 정보는
Software design pattern
항목에 보다 자세히 정리했다.
디자인 패턴과 패턴 학회
GoF의 디자인 패턴과 그 멤버들 그리고 패턴에 관심을 갖는 학자, 엔지니어, 출판업자들이 모여서 PLoP라는 학회를 시작하게 된다.
패턴에 대한 비판
많은 분이 디자인 패턴에 대해 비판했습니다. 이분들이 주장하는 패턴을 사용하지 말아야 할 보편적인 이유에 대하여 알아봅시다.
약한 프로그래밍 언어를 위한 클루지로 작동합니다
일반적으로 패턴의 필요성은 개발자가 추상화 수준이 부족한 프로그래밍 언어나 기술을 선택했을 때 발생합니다. 이 경우 패턴은 약한 프로그래밍 언어에 필요한 초능력을 부여하는 클루지(문제의 어지럽고 임시변통의 그러나 효과적인 해결책)로 작동합니다.
예를 들어 Strategy 패턴은 대부분의 최신 프로그래밍 언어에서 간단한 익명(람다) 함수로 구현할 수 있습니다.
비효율적인 해결책
패턴은 이미 널리 사용되는 문제 해결 방식의 체계화를 시도합니다. 많은 사람이 이렇게 통합된 패턴들을 도그마처럼 신봉하여 패턴을 프로젝트의 맥락에 따라 적용하지 않고 '문자 그대로' 구현합니다.
부당한 사용
많은 초보자는 패턴을 갓 배운 후, 더 간단한 코드로도 문제 해결이 되는 상황에도 모든 곳에 패턴을 적용하려고 합니다. 이것은 최근에 패턴에 익숙해진 많은 초보자를 괴롭히는 문제입니다.
See also
- Design pattern
- Software design
- Software design patterns
- Gang of Four (GoF)
- Algorithms
- Software architecture - 소프트웨어 아키텍처 디자인 관련 내용.
- Event driven architecture
- System Architecture
- Feature-Sliced Design (FSD)