소프트웨어 디자인을 할 때 자주 일어나는 문제들에 대한 정형화된 해답들을 말합니다.
이 패턴들은 단순히 라이브러리로 패턴을 찾아서 프로그램에 복사할 수 있는 것이 아닙니다. 디자인패턴은 코드의 특정 파트가 아니라 특정 문제를 해결하기 위해 필요한 범용적인 개념입니다.
디자인 패턴은 종종 알고리즘과 혼동되기도 하는데, 이는 두 개념 모두 알려진 문제들에 대한 전형적인 해답들을 묘사하고 있기 때문입니다.
차이점을 보면 알고리즘은 목적을 달성하기 위해 구체적인 솔루션을 제시하는 반면 디자인 패턴은 솔루션에 대해 더 추상적인 묘사를 합니다(high-level description).
그렇기 때문에 디자인패턴의 경우 동일한 패턴을 적용해도 각기 다른 결과물이 나올 수 있습니다.
new operator를 사용해서 직접적으로 오브젝트를 인스턴스화시키는 대신, 생성 로직을 숨겨서 생성하는 방법을 제공하는 디자인 패턴을 말한다.Behavioral, Creational, Structural Patterns[Definition]