코드를 작성하는 형식에 대해서 알아보자.
이름은 신문기사의 제목처럼 간단하면서도 설명 가능하게 짓는다.
갈수록 세세하게 묘사하라
소스파일의 첫 부분은 고차원 개념과 알고리즘을 설명하고 이후 아래로 내려갈수록 세세하게 묘사한다.
개념은 빈 행으로 분리한다.
문단을 작성할 때 사이 여백을 주듯이 개념이 나뉠 떄 마다 빈 행을 준다.
세로밀집도는 연관성을 의미한다.
서로 밀접한 코드는 세로로 가까이 놓아야한다.
같은 파일에 속할 정도로 밀접한 두 개념은 세로거리로 연관성을 표현한다.
인스턴스 변수는 클래스 맨 처음에 선언한다.
C++ 에서는 일반적으로 모든 인스턴스 변수를 클래스 마지막에 선언한다고 한다.
한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다.
예를들면 다음과 같다.
void doSomething() {
if (isReal()) {
return "";
}
...
}
boolean isReal() { ... }
가능하면 호출하는 함수를 호출되는 함수보다 먼저 배치한다.
개념적 유사성
위에서 설명한한 함수가 다른 함수를 호출해 생기는 직접적인 종속성
외에도 비슷한 동작을 수행하는 함수도 친화도가 높다고 볼 수 있다.
위에서 이야기한 내용이지만 호출하는 함수를 호출되는 함수보다 먼저 배치함으로서 소스코드 모듈이 고차원에서 저차원으로 자연스럽게 내려간다.
프로그래머는 명백하게 짧은 행을 선호한다.
책에서는 개인적으로 한 행의 길이를 120자 정도로 제한하고있다.
우아한 테크코스 프리코스의 자바 컨벤션에서도 120자로 제한했다.
뭔가 당연한 이야기지만 공백을 통해 밀접한 개념과 느슨한 개념을 표현할 수 있다.
예를들어 아래 할당문에서는 왼쪽 요소와 오른쪽 요소가 분병히 나뉘기 때문에 공백으로 구분한다.
...
// lineSize와 lineCount 사이에 공백을 줬다.
lineWithGistogram.addLine(lineSize, lineCount);
...
// 함수와 인수는 밀접한 관계를 가지고있다.
// 때문에 함수이름과 이어지는 괄호 사이는 공백을 넣지 않았다.
private boolean isBallByIndex(int index)
들여쓰기한 파일은 구조가 한눈에 들어온다.
들여쓰기는 회사별로 정해진 컨벤션이 다를 수 있다.
public String render() throws Exception { return ""; }
while (doSomething...)
;
뭐가 됐든 코드의 스타일은 일관적이고 매끄러워야한다.
떄문에 팀 규칙을 따르는 것이 1순위다.
이번 장은 이름짓기가 아닌 어떻게 코드를 배치할지에 대해 알아보았다.
우아한 테크코스 2주차 미션을 진행하면서 아무리 네이밍에 신경쓰고 코드를 작성해도 코드가 잘 안읽혔는데 그 이유를 바로 해소시켜주는 그런 내용이었다.
신문기사처럼 핵심 문장을 위에 작성하고 그에 대한 설명을 줄줄이 풀어나가는 식으로 코드를 작성해나간다는 부분이 인상깊었다.
Clean Code(클린 코드) | 로버트 C. 마틴