Clean Code that Works.

알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.
스트래티지을 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.

디자인 원칙
1. 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로 부터 분리 시킨다.
  - 달라지는 부분을 찾아서 나머지 코드에 영향을 주지 않도록 '캡슐화' 한다. 그러면 코드를 변경하는 과정에서 의도하지 않는 일이 일어나는 것을 줄이면서 시스템의 유연성을 향상시킬 수 있다.
2. 구현이 아닌 인터페이스에맞춰서 프로그래밍 한다.
3. 상속보다는 구성을 활용한다.