깨끗한 코드
코드의 존재 이유
- 코드는 요구사항을 상세히 표현하는 수단이다.
- 더 나은 언어를 만들어 요구사항에 가까운 표현을 할 수도 있고, 정형화된 구조를 뽑아낼 도구를 만들 수도 있다. 하지만 어느 순간에는 정밀한 표현이 필요하게 되며, 그 결과로 코드의 존재는 필수적이다.
나쁜 코드
- "나중에 손보자"라는 생각은 위험하다.나중은 절대 오지 않는다.
나쁜 코드로 인한 대가
- 나쁜 코드는 더 많은 나쁜 코드를 불러오며, 궁극적으로 생산성은 0에 수렴한다.
- 원대한 재설계의 꿈
- 새로운 설계를 위한 팀이 결성되지만, 기존 프로젝트의 기능 업데이트를 따라잡아야 하는 과제가 주어진다.
- 초기 재설계 팀원들이 대부분 떠나면서, 결국 또다시 엉망이 되며 재설계가 반복된다.
- 처음부터 시간을 들여 깨끗한 코드를 작성하는 것이 중요하다.
프로그래머의 태도
- 상사는 일정과 요구사항을 강력하게 밀어붙이는 이유가 있다.그것이 그들의 책임이기 때문이다. 하지만 좋은 코드를 지키는 것은 프로그래머의 책임이다.
- 나쁜 코드의 위험을 이해하지 못하는 관리자의 말을 그대로 따르는 것은 전문가답지 못한 행동이다.
원초적 난제
- 기한을 맞추기 위해 나쁜 코드를 양산하는 것이 오히려 업무 속도를 늦춘다.기한을 맞추는 유일한 방법은 깨끗한 코드를 작성하는 습관을 들이는 것이다.
깨끗한 코드라는 예술?
- 깨끗한 코드를 작성하는 프로그래머는 빈 캔버스를 우아한 작품으로 바꿔가는 화가와 같다.
깨끗한 코드란?
- 세세한 사항까지 꼼꼼하게 처리하는 코드
- 프로그래머들이 흔히 대충 넘어가는 오류 처리, 메모리 누수, 경쟁 상태, 일관성 없는 명명법 등을 포함한다.
- 가독성
- 코드는 잘 쓴 문장처럼 읽혀야 한다.
- 문학적으로 표현된 코드는 인간이 읽기 좋다.
- 코드는 추측이 아닌 사실에 기반해야 한다.
- 테스트 케이스가 없는 코드는 깨끗한 코드가 아니다.
- 작을수록 좋다.
- 주의 깊게 작성된 코드
- 시간을 들여 깔끔하고 단정하게 정리된 코드.
- 세세한 사항까지 꼼꼼하게 신경 쓴 코드.
- 론 제프리스의 의견 (중요한 순서대로):
- 모든 테스트를 통과한다.
- 중복이 없다.
- 시스템 내 모든 설계 아이디어를 표현한다.
- 클래스, 메서드, 함수 등을 최대한 줄인다.
- 저자의 의견: 중복을 피하라, 한 기능만 수행하라, 제대로 표현하라, 작게 추상화하라.
- 워드 커닝햄의 의견:
- 코드를 읽으며 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드다.
- 코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드라 불러도 된다.
reference
클린 코드 ( 로버트 C.마틴 )