- 켄트 백 :  프로그램을 짤 때는 자신과 컴퓨터뿐 아니라, 다른 사람들을 생각해야 한다! 
                ,공동체에 대한 기여가 개인으로써의 최대 목표


- 구현패턴 : 커뮤니케이션을 돕는 프로래밍기법에 초점


- 코드를 통한 커뮤니케이션을 위한 단계

1. 생각을 하며 프로그래밍 하는것
2. 다른 사람들의 중요성을 인정하는 것 - 프로그래밍은 한 사람과 기계 사이의 외로운 교류, 혹은 그이상
3. 구현패턴을 이용해 실천으로 옮기기


- 디자인패턴과 구현패턴
1. 디자인패턴 : 개발 기간 동안 하루에 몇 하례 해야하는 결정(보통 객체 간의 관계를 결정)
2. 구현패턴 : 몇 초에 한 번씩 하게 되는 결정

- 프로그램의 법칙
1. 새로 짜는 경우 보다 기존 프로그램을 읽는 경우가 많다.
2. 프로그램에 있어 '완성'은 없다. 최초 개발 비용보다 이후 수정 비용이 더 크다
3. 프로그램 구조는 몇 가지 상태와 제어 흐름 개념으로 결정된다
4. 프로그램을 읽는 사람은 개념과 더불어 세부 사항까지도 이해해야 한다.

- 패턴은 결정 요소들의 패턴이다.
- 결정 요소들 가의 상대적 우선 순위가 높은 패턴이 적용된다

- 패턴은 시간과 에너지를 줄여준다
- 패턴은 절대적인 진리가 아니므로, 사람의 의사 결정을 돕는 도구 정도로 생각하자.



- 결정 사항에 영향을 미치는 동력 force : 가치value 와 원칙principle

- 가치 : 모든 프로그래밍에 적용되는 주제 : 커뮤니케이션, 단순성, 유연성
- 원칙 : 패턴 : 중요하지만 때로는 직접 적용하기 어려운 가치와, 적용법은 명확하지만 조금은 지엽적인 패턴 사이의 가교 역할

- 패턴 : 지금 당장 무엇을 해야 할지 알려주고,
- 가치: 패턴을 사용해야 하는 동기를 알려주며,
- 원칙 : 동기를 행동으로 어떻게 바꿔줄지 알려준다.

- 훌륭한 프로그램의 공통적 가치 : 커뮤니케이션, 단순성, 유연성, 확장성을 고래해서 프로그램을 짜지만, 불필요한 요소를 사용하지 않으며, 읽고 이해하기 쉬운 프로그램을 짜야한다.

[가치]
- 커뮤니케이션
 개발자가 코드를 쉽게 이해하고, 수정하고, 사용할 수 있는 상태
- 단순성
 의미 없는 코드는 모두 제거, 설계 시에도 과도한 요소는 모두 제거, 요구 사항을 분석해 꼭 필요한 사항만 뽑아내라
- 유연성
 개발 비용은 대부분 처음 프로그램이 작성된 후부터 들어간다, 프로그램의 수정은 가급적 쉬워야 한다.
 유연성이 있으면서도 당장 이득을 얻을 수 있는 패턴 사용

=> 구현패턴의 학습은 단순하고 이해하기 쉬우면서 수정이 쉬운 코드를 작성하는 것이 최종목표!!

[원칙]
- 지역적 변화
- 최소 중복
- 로직과 데이터의 결합
- 대칭성
- 선언적 표현
- 변화율

+ Recent posts