프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야한다. 코드 형식을 맞추기 위해 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다.
형식을 맞추는 목적
- 코드의 형식은 중요하다
- 오늘 구현한 기능이 다음 버전에서 바뀔 확률은 아주 높으며, 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다
적절한 행 길이를 유지해라
- 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다.
신문 기사 처럼 작성하라
- 이름은 간단하면서도 설명이 가능하게 짓는다
- 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다
- 아래로 내려갈수록 의도를 세세하게 묘사한다
개념은 빈 행으로 분리하라
- 일련의 행 묶음은 완결된 생각 하나를 표현한다
- 생각 사이는 빈 행을 넣어 분리해야 한다
- 빈 행은 새로운 개념을 시작한다는 시각적 단서로 주어야 한다
세로 밀집도
- 줄 바꿈이 개념을 분리한다면 세로 밀집도는 연관성을 의미한다
- 의미 없는 주석으로 인스턴스 변수들을 떨어뜨려 놓지 말자
수직 거리
- 서로 밀접한 개념은 세로로 가까이 둬야 한다
- 두 개념이 사로 다른 파일에 속한다면 규칙이 통하지 않지만, 타당한 근거가 없다면 서로 밀접한 개념은 한 파일에 속해야 한다
- 변수 선언, 변수는 사용하는 위치에 최대한 가까이 선언한다
- 인스턴스 변수, 인스턴스 변수는 클래스 맨 처음에 선언한다
- 종속 함수, 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다. 또한 가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다
- 개념적 유사성, 개념적인 친화도가 높을수록 코드를 가까이 배치해야 한다
세로 순서
- 일반적으로 함수 호출 종속성은 아래 방향으로 유지한다
- 호출되는 함수를 호출하는 함수보다 나중에 배치한다
가로 형식 맞추기
- 프로그래머는 명백하게 짧은 행을 선호한다
- 120자 정도로 행 길이를 제한하여 사용하자
가로 공백과 밀집도
- 가로 공백을 이용해 밀접한 개념과 느슨한 개념을 표현할 수 있다
- 복잡한 수식의 가독성을 높여줄 수 있다
int lineSize += line.lenght(); // 할당문의 왼쪽 오른쪽 요소가 나뉜다는 사실을 표현 (느슨한표현)
lineWidthHistogram.addLine(lineSize, lineCount); // 함수와 인수는 밀접하다
private static double root(int a, int b, int c) {
double determinant = determinant(a, b, c);
return (-b - Math.sqrt(determinant)) / (2*a); // 공백을 통해 수식을 읽기 편해졌다
}
가로 정렬은 할 필요가 없다
들여 쓰기
- 짧은 if, while 문에서도 들여 쓰기를 무시하지 말자
- scope로 이루어진 계층을 표현하기 위해 들여쓰기를 한다
팀 규칙
- 팀은 한 가지 규칙에 합의해야 한다
- 그리고 모든 팀원은 그 규칙을 따라야 한다