켄트백의 구현패턴-프로그래밍 이론

프로그래밍 이론

결정사항에 영향을 미치는 많은 동력이 있다 여기선 가치와 원칙 2가지로 나눈다.

가치는 모든 프로그래밍에 적용되는 주제

원칙은 가치처럼 언제나 적용되는 것은 아니지만 항상 중요하지만 때로는 직접 적용하기 어려운 가치와 적용법은 명확하지만
조금은 지엽적인 패턴사이의 가교 역활을 하는것

결정이 애매한 사항에 원칙을 알고 있다면 다른 패턴의 일관성을 깨지 않으면서 훌륭한 해결책을 찾을 수 있다.

가치

공통적인 가치는 커뮤니케이션, 단순성, 유연성이다.

커뮤니케이션

개발자가 코드를 쉽게 이해하고 수정하고 사용할 수 있다면 그 코드는 개발자와 커뮤니케이션 하고 있다고 이야기 할수 있다.

코드를 소설처럼 읽을수 있게 해야한다(도널드 크누스 - literate programming)

단순성

복잡도를 낮추면 프로그램을 읽고 사용하고 수정하는 사람들이 프로그램을 훨씬 빨리 이해할수 있다.

단순성이란 독자의 수준에 따라 달라진다. 능숙한 프로그래머와 초보 프로그래머에 따라서 이해도가 틀리기 때문이다.

프로그램을 최대한 단순화 하라. 의미 없는 코드는 모두 제거하라. 설계시에도 꼭필요한 사항만 넣어라

유연성

유연성은 비효율적인 코딩이나 설계를 정당화해주는 가치이다.
왜 상수의 값을 프로퍼티로 저장하고 읽어서 처리하는가 그것은 유연성 때문이다.

프로그램은 유연해야 하지만 프로그램이 발전하는 방향으로 유연해야 한다.

유연성은 복잡도를 증가시킨다.

커뮤니케이션을 중시하면 유연성도 좋아진다.

원칙

원칙은 가치에 비해 좀더 프로그래밍에 특화된 개념

지역적 변화

코드를 수정할 때 함께 바꿔야 하는 부분을 최소화 하라.
구현 패턴을 사용하는 중요한 이유는 프로그램 수정 비용을 낮추기 위함이므로 지역적 변화의 원칙은 여러패턴에 근간이 된다.

최소 중복

지역적 변화를 돕는 다른 원칙은 최소 중복의 원칙이다.

중복을 없애는 한 가지 방법은 프로그램을 여러 작은 부분 짧은 구문, 짧은 메소드, 작은 객체, 작은 패키지로 나누는 것이다.

로직과 데이터의 결합

지역적 변화의 원칙에 근거한 다른 원칙은 로직과 데이터를 함께 유지하는 것이다.
데이터와 그 데이터를 처리하는 로직을 밀접하게 - 가급적 같은 메소드 혹은 각은 객체 내에, 최소한 같은 패키지 내부에-배치하라.

프로그램을 수정하는 경우, 로직과 데이터를 모두 고쳐야 할 경우가 많다. 따라서 로직과 데이터가 함께 있다면
프로그램을 수정하더라도 그형향이 일정 영역에 머물게 된다.

대칭성

프로그램에서 대칭성은 여러 곳에 존재한다. add() 메소드가 있음 remove() 메소드가 있다.

선언적 표현

명령형 프로그램밍은 강력하고 유연하지만 프로그램을 이해하기 위해서는 수행 흐름을 따라가야 한다.
제어 흐름과 데이터 흐름을 추적해야 프로그램을 제대로 이해할 수 있다.

수행순서가 중요한 구문이나 조건부 구문이 없는 일반 구문의 경우 선언적 표현을 통해 코드를 작성하는 것이 이해하기 쉽다.

변화율

마지막 원칙은 함께 변하는 로직과 데이터를 함께 관리하고 변화율이 다른 로직과 데이터는 분리하는 것이다.

변화율은 시간적 대칭성으로 볼수 있다.

참조