Clean Code that Works.

패턴이란 특정 컨텍스트 내에서 주어진 문제에 대한 해결책이다.

컨텍스트(context)란 패턴이 적용되는 상황을 뜻한다. 반복적으로 일어날 수 있는 상황이어야만 한다.
ex) 객체들의 컬렉션이 주어져 있다.

문제(problem)란 그 컨텍스트 내에서 이루고자 하는 목적을 뜻한다. 하지만 컨텍스트 내에서 생길 수 있는 제약조건도 문제에 포함된다
ex) 컬렉션의 구현을 드러내지 않으면서 그 안에 있는 각 객체들에 대해서 순환 작업을 할 수 있어야 한다

해결책(solution)이 바로 우리가 찾아내야 하는 것이다. 누구든지 적용해서 일련의 제약조건 내에서 목적을 달성할 수 있는 일반적인 디자인을 뜻한다.
ex) 반복 잡업을 별도의 클래스로 캡슐화시킨다.

 어떤 컨텍스트 내에서 일련의 제약조건에 의해 영향을 받을 수 있는 문제에 봉착 했다면, 그 제약 조건 내에서 목적을 달성하기 위한 해결책을 찾아낼 수 있는 디자인을 적용하면 된다.

패턴이 아닌 디자인에 정신을 집중해야 한다. 반드시 필요한 경우에만 패턴을 사용해야 하고 더 간단한 해결책이 있다면 그 방법을 쓰는 것이 옳은 것이다.