[Clean Code] 5장 | 형식 맞추기

PADO·2020년 12월 28일
0

Clean Code

목록 보기
6/15
post-thumbnail
post-custom-banner

🧷 5장 | 형식 맞추기

뚜껑을 열었을 때 독자들이 코드가 깔끔하고, 일관적이며, 꼼꼼하다고 감탄하면 좋겠다.
질서 정연하다고 탄복하면 좋겠다. 모듈을 읽으며 두 눈이 휘둥그래 놀라면 좋겠다.
전문가가 짰다는 인상을 심어주면 좋겠다.

프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위해 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다.

📘 형식을 맞추는 목적

코드 형식은 중요하다! 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 의무다.

오늘 구현한 기능이 다음 버전에서 바뀔 확률은 아주 높으나, 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다.

📘 적절한 행 길이를 유지하라

일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다.

  • 신문 기사처럼 작성하라

    • 이름은 간단하면서도 설명이 가능하게 짓는다.
      → 이름만 보고도 올바른 모듈을 살펴보고 있는지 판단할 정도로 신경 써서 짓는다.
    • 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다.
    • 아래로 내려갈수록 의도를 세세하게 묘사한다.
    • 마지막에는 가장 저차원 함수와 세부 내역이 나온다.
  • 개념은 빈 행으로 분리하라

빈 행은 새로운 개념을 시작한다는 시각적 단서다.
일련의 행 묶음은 완결된 생각 하나를 표현한다. 생각 사이에는 빈 행을 넣어 분리해야 한다.

  • 세로 밀집도

세로 밀집도는 연관성을 의미한다.
서로 밀접한 코드 행은 세로로 가까이 놓여야 한다.

  • 수직 거리

    • 변수는 사용하는 위치에 최대한 가까이 선언한다.
    • 인스턴스 변수는 클래스 맨 처음에 선언한다.
    • 종속함수는 호출 함수에 세로로 가까이 배치한다. 가능하면 호출함수를 먼저 배치한다.
    • 상수는 실제로 사용하는 함수와 차원이 비슷해야 한다. 잘 알려진 상수가 저차원 함수에 묻히면 안 된다.
    • 개념적 유사성이 높을수록 코드를 가까이 배치한다. 명명법이 똑같고 기본 기능이 유사하면 가까이 배치한다.

서로 밀접한 개념은 세로로 가까이 둬야 한다.
시스템을 이해할 때, 이 조각 저 조각이 어디에 있는지 찾고 기억하느라 시간과 노력을 소모하면 안 된다.

  • 세로 순서

함수 호출 종속성은 아래 방향으로 유지한다.
호출 되는 함수를 호출 함수보다 나중에 배치하면 소스 코드 모듈이 고차원에서 저차원으로 자연스레 내려간다.
신문 기사와 마찬가지로 가장 중요한 개념을 가장 먼저 표현하고, 세세해질수록 나중에 배치한다.
→ 독자가 소스 파일에서 첫 함수 몇 개만 읽어도 개념을 파악하기 쉬워진다. 세세한 사항까지 파고들 필요가 없다.

📘 가로 형식 맞추기

짧은 행이 바람직하다.

  • 가로 공백과 밀집도

가로로는 공백을 사용해 밀접한 개념과 느슨한 개념을 표현한다.

private void measureLine(String line) {
	int lineSize = line.length();
	totalSize += lineSize;
	lineWidthHistogram.addLine(lineSize, lineCount);
}
  • 할당 연산자를 강조하려 앞뒤로 공백을 줬다. 왼쪽과 오른쪽 요소가 분명히 나뉜다.
  • 함수와 인수는 서로 밀접하기에 사이에 공백을 넣지 않았다. 공백을 넣으면 별개로 보인다.
  • 함수를 호출하는 코드에서 괄호 안 인수는 공백으로 분리했다. 인수가 별개라는 사실을 보여준다.
private static double determinant(double a, double b, double c) {
	return b*b - 4*a*c;
}
  • 연산자 우선순위를 강조하기 위해서도 공백을 사용한다.

  • 곱셈은 우선순위가 가장 높기 때문에 공백이 없다.

  • 항 사이에는 공백이 들어간다. 덧셈과 뺄셈은 우선순위가 곱셈보다 낮기 때문이다.

  • 가로 정렬

선언문과 할당문의 정렬은 유용하지 못하다.

  • 들여쓰기

    • 들여쓰는 정도는 계층에서 코드가 자리잡은 수준에 비례한다.
    • 클래스 정의처럼 파일 수준인 문장은 들여쓰지 않는다.
    • 클래스 내 메서드는 클래스보다 한 수준 들여쓴다.
    • 메서드 코드는 메서드 선언보다 한 수준 들여쓴다.
    • 블록 코드는 블록을 포함하는 코드보다 한 수준 들여쓴다.

들여쓰기한 파일은 구조가 한눈엔 들어온다.

  • 들여쓰기 무시하기

때로는 간단한 if문, 짧은 while문, 짧은 함수에서 들여쓰기 규칙을 무시하고픈 유혹이 생긴다. 넣어야 한다.

  • 가짜 범위

때로는 빈 while문이나 빈 for문을 접한다. 끝에 세미콜론(;)은 새 행에다 제대로 들여써서 넣어준다.

📘 팀 규칙

한 소스 파일에서 봤던 형식이 다른 소스 파일에도 쓰이리라는 신뢰감을 독자에게 줘야 한다.

좋은 소프트웨어 시스템은 읽기 쉬운 문서로 이뤄진다. 스타일은 일관적이고 매끄러워야 한다.

post-custom-banner

0개의 댓글