현재까지 소프트웨어 개발을 위한 개념이나 철학으로 정립된 것은 크게 구조적인 것과 객체지향적인 것으로 나눌 수 있다.
소프트웨어 개발은 추상화 레벨을 구체화시켜나가면서 무엇을(What) 어떻게(How) 할지를 반복해나가는 과정이다.
예를 들어 “Hello World” 문자열을 출력한다고 했을 때, 추상화 레벨 0 에서 무엇(What)에 해당하는 것은 “Hello World” 문자열을 출력한다는 것이 되고, 어떻게(How)에 해당하는 부분은 ‘파일로부터 “Hello World” 문자열을 입력받아서 다시 출력한다.’ 와 같은 부분이 될 수 있다.
그리고 추상화 레벨 0에서의 어떻게(How)가 추상화 레벨 1의 무엇을(What)이 되면서, 다시 어떻게(How) 부분이 구체화 되는 방식이 What-How 생각 모델 이다.
What-Why-How 모델은 무엇(What) 이나 어떻게(How) 보다도 왜(Why)를 강조한 모델이다.
What-Why-How 생각 모델(Thinking Model)
‘왜(Why) 그것을 해야 하는가’에 대한 검증 기준은 목적(Goal)이 무엇인가가 될 것이며,
‘왜(Why) 그렇게 해야 하는가’에 대한 검증 기준은 어떤 것이 최적(Optimization)의 방법인가가 될 것이다.
이처럼 What-Why-How 모델은 기존의 What-How 모델에 왜(Why) 라는 질문과 함께 구체적으로 무엇(What)과 어떻게(How)를 검증하기 위한 목적(Goal)과 최적(Optimization)이라는 기준을 제시하므로, 소프트웨어 개발에서 최적의 해결책을 만들어내기 위한 가장 기본적인 틀이 될 것이다.
a general, reuseable solution to a commonly occurring problem within a given context in software design
빈번한 문제에 대해 재사용 가능한 해결책으로 이미 검증된 해결방법
디자인 패턴은 문제 해결방법의 Best Practice(모범 사례) 이다.
비슷한 문제에 대해 해결한 방법들을 보면 공통적인 방법이 사용되었다는 것이다.
대부분의 소프트웨어 문제는 이미 예전에 누군가 겪은 문제이고, 이를 해결하기 위한 여러 방법을 사용해 보았을 것이다. 그 방법들에서는 공통된 패턴이 나타났는데, 이 패턴을 모은 것이 디자인 패턴이다.