"오늘 구현한 기능이 다음 버전에서 바뀔 확률은 아주 높다.
그런데 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다."
그런데 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다."
코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 코드 형식이 중요한 이유이다.
적절한 행 길이를 유지하라
- 200줄 정도의 파일들로도 커다란 시스템을 구축할 수 있다.
- 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다.
신문 기사처럼 작성하라
- 소스 파일의 이름은 모듈의 내용을 짐작할 수 있게 짓는다.
- 소스 파일의 첫 부분은 고차원 개념과 알고리즘을 설명한다.
- 아래로 내려갈수록 의도를 세세하게 묘사한다.
- 마지막에는 가장 저차원 함수와 세부 내역이 나온다.
개념은 빈 행으로 분리(구분)하라
- 빈 행은 새로운 개념을 시작한다는 시각적 단서다.
- 패키지 선언부, import 문, 각 함수 사이에 빈 행이 들어간다.
세로(수직) 형식
- 세로 밀집도는 연관성을 의미한다.
-
서로 밀접한 코드 행은 세로로 가까이 놓여야 한다.
- 타당한 근거가 없다면 서로 밀접한 개념은 한 파일에 속해야 한다. (이게 바로 protected 변수를 피해야 하는 이유 중 하나다.)
변수 선언
- 변수는 사용하는 위치에 최대한 가까이 선언한다.
- 지역 변수는 각 함수 맨 처음에 선언한다.
- 루프를 제어하는 변수는 루프 문 내부에 선언한다.
인스턴스 변수
- 인스턴스 변수는 클래스 맨 처음에 선언한다.
- 변수 간에 세로로 거리를 두지 않는다.
종속 변수
- 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다. 또한 가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다.
- 프로그램이 자연스럽게 읽힌다.
- 규칙을 일관적으로 적용한다면 독자는 방금 호출한 함수가 잠시 후에 정의되리라는 사실을 예측할 수 있다.
개념적 유사성
- 개념적 친화도가 높을수록 코드를 가까이 배치한다.
- 명명법이 똑같고 기본 기능이 유사한 함수들은 개념적 친화도가 높다.
가로 형식
- 100자나 120자가 넘어가지 않도록 주의한다.
가로 공백과 밀집도
- 가로 공백을 사용하여 밀접한 개념과 밀접한 개념을 표현한다.
- 할당 연산자 앞뒤로 공백을 주어 두 요소를 분명히 나눈다.
- 함수와 인수는 서로 밀접하므로 함수 이름과 이어지는 괄호 사이에는 공백을 넣지 않는다.
- 함수 괄호 안 인수는 공백으로 분리하여 쉼표를 강조하여 인수가 별개임을 보여준다.
- 연산자 우선순위를 강조하기 위해 공백을 사용한다.
- 곱셈은 우선순위가 가장 높기 때문에 앞뒤 공백이 없다.
- 항 사이에는 공백이 들어간다.
단, 코드 형식을 자동으로 맞춰주는 도구는 대다수가 연산자 우선순위를 고려하지 못하므로, 수식에 똑같은 간격이 적용된다.
가로 정렬
- 선언부와 할당부가 있을 때 할당부를 같은 가로 위치에 정렬하는 것은 그다지 유용하지 않ㄴ다.
들여쓰기
- 들여쓰기는 코드의 계층 수준을 보여준다.
들여쓰기 무시하기
- 짧은 if 문, while 문, 함수에도 들여쓰기로 범위를 제대로 표현한다.
가짜 범위
- 빈 while 문이나 for 문은 가능한 피하되 사용할 경우 빈 블록을 올바로 들여쓰고 괄호로 감싼다.
Reference
로버트 C. 마틴. (2013). 07장. 형식 맞추기기. Clean Code. 인사이트.