프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다.
오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 코드 형식은 의사소통의 일환이고 의사소통은 전문 개발자의 일차적인 의무이다.
일반적으로 큰 파일보다 작은 파일이 읽기 쉽다.
🔎 신문 기사처럼 작성하라
신문을 읽을 때를 생각해보자. 최상단에 기사를 요약하는 표제가 나오고,첫 문단은 전체 기사 내용을 요약한다. 쭉 읽으며 내려가면 세세한 사실이 조금씩 드러난다.
소스파일도 신문 기사와 비슷하다. 이름은 간단하면서도 설명이 가능하게 짓는다. 소스 파일 첫부분 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 묘사한다.
🔎개념은 빈 행으로 분리하라
생각 사이는 빈 행을 넣어 분리해야 마땅하다. 빈 행을 빼버리면 코드 가독성이 현저하게 떨어진다.
🔎세로 밀집도
줄바꿈이 개념을 분리한다면 세로 밀집도는 연관성을 의미한다. 즉, 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다는 뜻이다.
🔎수직 거리
함수나 변수가 정의된 코드를 찾으려 소스 파일을 위아래로 뒤지는 뺑뺑이를 돌아 본 적이 있는가? 이 조각 저 조각이 어디에 있는지 찾고 기억하느라 시간과 노력을 소모하는 건 달갑지 않다.. 서로 밀접한 개념은 세로로 가까이 둬야 한다.
🔎세로 순서
일반적으로 호출 되는 함수를 더 뒤에 배치한다. 그러면 소스 코드 모듈이 고차원에서 저차원으로 자연스럽게 내려간다.
가로 길이는 짧아야 좋다.
🔎가로 공백과 밀집도
가로로는 공백을 사용해 밀접한 개념과 느슨한 개념을 표현한다. 예를 들어.. addLine(lineSize, lineCount)
라는 함수 호출 코드가 있을때, 파라미터 사이를 공백 하나로 분리한 모습을 볼 수 있다.
🔎가로 정렬
변수 길이가 들쭉날쭉이라 정렬하고 싶을 수도 있다. 예를 들면
private Socket socket;
private InputStream input;
...
이렇게 공백을 좀 뒤서 세로로 열이 맞게 하고 싶을 수도 있다. 나도 c언어로 뭔가 출력하는 과제를 할때 이런식으로 가로 너비를 맞추곤 했던 기억이 있다.
근데 사실, 별 쓸데 없다. 정렬하지 않아야 오히려 결함을 찾기 쉽다.
private Socket socket;
private InputStream input;
...
그냥 이렇게 쓰자.
🔎들여쓰기
우리는 범위로 이뤄진 계층을 표현하기 위해 코드를 들여쓴다. 이렇게 하면 이 범위에서 저 범위로 재빨리 이동할 수 있다. 현재 상황과 무관한 코드 블럭을 일일이 살펴볼 필요가 없다. 들여쓰기를 잘하자..
프로그래머라면 각자 선호하는 규칙이 있지만, 팀에 속한다면 팀 규칙을 따라야 한다. 팀이 한 가지 규칙에 합의해야 소프트웨어가 일관적인 스타일을 보인다.