디자인 패턴에 대해 잘 정리되어 있는 글을 발견하고 공부를 하던 중 내가 이해하는 방식으로 조금씩 정리를 해보고자 한다.
디자인 패턴은 소프트웨어 디자인의 일반적인 문제들에 대해 시도되고 검증된 해결책들을 모은 것이다. 이러한 문제들을 다루지 않더라도 패턴을 알고 있으면 여전히 쓸모가 있는데, 그건 패턴을 배우게 되면 객체 지향 디자인의 원칙들을 사용해 많은 종류의 문제를 해결하는 방법들을 배울 수 있기 때문이다. = 문제 해결 방법의 패턴들을 배울 수 있음
디자인 패턴은 당신과 당신의 팀원들이 더 효율적으로 의사소통하는 데 사용할 수 있는 공통 언어를 정의할 수 있다. 예를 들어서 당신의 팀이 디자인 패턴을 이해하면 업무 처리 중 당신이 '그 문제를 위해서는 그냥 싱글턴을 사용하세요'라고 말하면 모두가 당신이 무엇을 뜻했는지 이해할 수 있을 것이며 싱글턴 패턴에 포함된 개념들은 설명할 필요도 없을 것이다. = 효울적인 의사소통 가능
디자인 패턴은 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 일반적인 해결책들이다. 코드에서 반복적으로 되풀이되는 디자인 문제들을 해결하기 위하여 맞춤화할 수 있는 청사진들을 미리 만들어 놓은 것과 같다.
패턴은 재사용할 수 있는 코드 조각이 아니라 특정 문제를 해결하는 방식을 알려주는 일반적인 개념으로, 패턴의 세부 개념들을 적용하여 프로그램에 맞는 해결책을 구현할 수 있다.
패턴은 알고리즘과 자주 혼동된다. 왜냐하면 두 개념 모두 알려진 문제에 대한 일반적인 해결책을 설명하기 때문. 알고리즘은 어떤 목표를 달성하기 위해 따라야 할 명확한 일련의 절차를 항상 정의하지만, 패턴은 해결책에 대한 더 상위 수준의 설명이다. 예를 들어 같은 패턴을 두 개의 다른 프로그램에 적용하면 두 프로그램의 코드는 다를 것이다.
알고리즘을 요리법에 비유할 수 있다면 패턴은 청사진에 비유할 수 있다. 둘 다 목표를 달성하기 위한 명확한 단계들이 제시되어 있지만, 요리법에는 어떻게 요리를 완성하는지에 대한 단계들이 명확하게 제시되어 있으나, 청사진은 결과와 기능들을 제시하나 정확한 구현 순서는 사용자가 지정한다.
디자인 패턴은 복잡성, 상세도 및 설계 중인 전체 시스템에 대한 적용 범위에 따라 분류된다. 도로 건설에 비유하여 예를들면, 교차로를 더 안전하게 만들기 위해 신호등을 설치하거나 보행자를 위한 지하도가 있는 전체 다층 인터체인지를 구축하는 작업에 비유할 수 있다.
가장 기본적인 하위 설계 패턴을 이디엄이라고 한다. 일반적으로 이디엄은 단일 프로그래밍 언어에만 적용할 수 있다.
아키텍처 패턴은 상위 설계 패턴이며 가장 보편적으로 사용된다. 개발자들은 거의 모든 언어로 아키텍처 패턴들을 구현할 수 있으며 다른 패턴들과 달리 애플리케이션 전체의 구조(아키텍처)를 설계하는 데 사용할 수 있다.
또한 모든 패턴은 패턴의 의도 또는 목적에 따라 분류할 수 있다.