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