[Clean Code] 07장 형식 맞추기

📅 2025-04-09 | 📂 카테고리: Reference | 🏷️ 태그: Reference, Java, Formatting, Clean code, Collaboration

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

코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 코드 형식이 중요한 이유이다.

적절한 행 길이를 유지하라

  • 200줄 정도의 파일들로도 커다란 시스템을 구축할 수 있다.
  • 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다.

신문 기사처럼 작성하라

  • 소스 파일의 이름은 모듈의 내용을 짐작할 수 있게 짓는다.
  • 소스 파일의 첫 부분은 고차원 개념과 알고리즘을 설명한다.
  • 아래로 내려갈수록 의도를 세세하게 묘사한다.
  • 마지막에는 가장 저차원 함수와 세부 내역이 나온다.

개념은 빈 행으로 분리(구분)하라

  • 빈 행은 새로운 개념을 시작한다는 시각적 단서다.
  • 패키지 선언부, import 문, 각 함수 사이에 빈 행이 들어간다.

세로(수직) 형식

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

  • 타당한 근거가 없다면 서로 밀접한 개념은 한 파일에 속해야 한다. (이게 바로 protected 변수를 피해야 하는 이유 중 하나다.)

변수 선언

  • 변수는 사용하는 위치에 최대한 가까이 선언한다.
  • 지역 변수는 각 함수 맨 처음에 선언한다.
  • 루프를 제어하는 변수는 루프 문 내부에 선언한다.

인스턴스 변수

  • 인스턴스 변수는 클래스 맨 처음에 선언한다.
  • 변수 간에 세로로 거리를 두지 않는다.

종속 변수

  • 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다. 또한 가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다.
    • 프로그램이 자연스럽게 읽힌다.
    • 규칙을 일관적으로 적용한다면 독자는 방금 호출한 함수가 잠시 후에 정의되리라는 사실을 예측할 수 있다.

개념적 유사성

  • 개념적 친화도가 높을수록 코드를 가까이 배치한다.
  • 명명법이 똑같고 기본 기능이 유사한 함수들은 개념적 친화도가 높다.

가로 형식

  • 100자나 120자가 넘어가지 않도록 주의한다.

가로 공백과 밀집도

  • 가로 공백을 사용하여 밀접한 개념과 밀접한 개념을 표현한다.
  • 할당 연산자 앞뒤로 공백을 주어 두 요소를 분명히 나눈다.
  • 함수와 인수는 서로 밀접하므로 함수 이름과 이어지는 괄호 사이에는 공백을 넣지 않는다.
  • 함수 괄호 안 인수는 공백으로 분리하여 쉼표를 강조하여 인수가 별개임을 보여준다.
  • 연산자 우선순위를 강조하기 위해 공백을 사용한다.
    • 곱셈은 우선순위가 가장 높기 때문에 앞뒤 공백이 없다.
    • 항 사이에는 공백이 들어간다.

단, 코드 형식을 자동으로 맞춰주는 도구는 대다수가 연산자 우선순위를 고려하지 못하므로, 수식에 똑같은 간격이 적용된다.

가로 정렬

  • 선언부와 할당부가 있을 때 할당부를 같은 가로 위치에 정렬하는 것은 그다지 유용하지 않ㄴ다.

들여쓰기

  • 들여쓰기는 코드의 계층 수준을 보여준다.

들여쓰기 무시하기

  • 짧은 if 문, while 문, 함수에도 들여쓰기로 범위를 제대로 표현한다.

가짜 범위

  • 빈 while 문이나 for 문은 가능한 피하되 사용할 경우 빈 블록을 올바로 들여쓰고 괄호로 감싼다.

Reference
로버트 C. 마틴. (2013). 07장. 형식 맞추기기. Clean Code. 인사이트.


← 돌아가기