사상 - 프로그래밍 이데올로기
프로그래밍 이론
프로그래밍을 이끄는 가치관
- 의사소통
- 단순함
- 유연성
가치관을 기술의 선택 기준으로
‘어쨰서 이런 것을 할 필요가 있는가?’, ‘이것은 어떤 가치가 있는가?’, ‘언제 이것을 사용하면 좋은가?’
가치관은 원칙을 통해 코드에 적용
- 결과의 국소화
- 반복의 최소화
- 로직과 데이터의 일체화
- 대칭성
- 선언형의 표현
- 변경빈도
어떤 기술을 적용할 때 고려해야 할 관점을 포스(forth)라고 한다. 포스는 다음것이 있다.
- 해결책이 충족해야 할 요구사항
- 과제에 포함된 제약
- 해결책에 요구되는 특성
지금 쓰는 도구는 왜 이런 형태가 되었을까?
기술을 배울때는 동작 원리나 발전 과정, 설계 배경 등도 동시에 알아야 한다.
제대로 이유를 설명할 수 있을 때까지 끈질기게 이해하고 나서 코드를 확정하도록 하자.
의사소통
코드도 남에게 보여주는 문서, 문서의 본질은 의사소통 수단이다.
코드를 읽기 쉽게 만들어라
코드를 읽는 쪽의 관점으로 전환하라
단순함
코드의 복잡성을 제거한다.
코드가 복잡하면 읽는 사람이 읽기가 어렵다 그리고 버그가 발생할 확률을 높힌다.
코드에 옥석을 가려서 석이 옥에 섞이지 않게 한다.
유연성
코드는 반드시 변경 된다 변경이 용이하게 만들어야 된다.
소프트 웨어는 최초 배포로 완성되는 것이 아니다.
경직된 설계에서 하양식으로 얻어지는 유연성 보다 단순함에서 시작해 단위테스트를 통해 상향식으로 얻어지는 유연성이 효과적이다.
결과의 국소화
격과의 국소화란 변경에 미치는 영향이 국소에 머무르도록 코드를 구성한다.
관계가 밀접한 코드를 한데 모은다. 관계성이 높은 코드는 모으고, 관계성이 낮은 코드는 서로 종속 되지 않도록 작성한다.
반복의 최소화
중복을 제거한다.
코드를 분활해서 관리 큰 코드 덩어리는 다른 큰코드에 어떤 부분을 포함할 가능성이 있음 공통 분모를 찾아서 작게 분활하자.
로직과 데이터의 일체화
로직과 해당 로직이 조작하는 데이터를 서로 가까이 배치하는것이 좋다.
데이터와 로직에 수정 시점은 같다 가까우면 가까울수록 변경 비용이 절약된다.
대칭성
코드에 일관성을 갖게 한다.
같은것은 같은 표현으로 한다.
선언형의 표현
명령형 보다는 가능한 선언형으로 표현한다.
흐름이 없어야 읽기 쉽다.
선언형을 코드에 도입하자.
변경빈도
코드를 수정하는 시점이 같으면 그룹핑해서 같은곳에 배치하자
변경이유가 하나라는것은 관련성 높은 코드가 집합해 있다는 뜻이다. 이는 높은 응집성을 충족하고 있는 견고한 코드다.
단일 책임 원칙(single responsibility principle)
참조