Clean Code - 로버트 C.마틴
5장, 형식 맞추기
코드의 형식을 맞추기 위해 간단한 규칙을 정하고 따라야 함
1. 형식을 맞추는 목적
- 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 영향을 미침
- 원할한 소통
2. 적절한 행 길이 유지
- 자바 파일 크기 = 클래스 파일 크기
- 500줄을 넘지 않고 대부분 200줄 정도인 파일로 커다란 시스템을 구축 할 수 있음
ex. JUnit, FitNesse, Time and Money는 상대적으로 파일 크기가 작고, 200줄 미만임
1) 신문 기사처럼 작성
- 아래로 내려갈수록 세세한 사실이 보이도록
- 이름: 간단하고 설명이 가능하게
- 첫 부분에는 고차원 개념과 알고리즘 설명
- 아래로 내려갈수록 의도를 세세하게 묘사
2) 개념은 빈 행으로 분리
- 코드는 ➡️, ⬇️ 방향으로 읽힘
- 각 행: 수식, 절
- 행 묶음: 완결된 생각 하나를 표현 --> 📌빈 행을 넣어 분리
3) 세로 밀집도
- 연관성: 서로 밀접한 코드 행은 세로로 가까이 놓여야 함
//1
public class Example{
/**
* 의미 없는 주석
*/
private String className;
/**
* 의미 없는 주석
*/
private List<Property> property = new ArrayList<>();
public void addProperty(Proterty property){
...
}
}
//2
public class Example{
private String className;
private List<Property> property = new ArrayList<>();
public void addProperty(Proterty property){
...
}
}
- 1과 2를 비교했을 때, 1은 2에 비해 변수2개, 함수1개라는 포인트가 눈에 들어오지 않음
4) 수직 거리
- 함수가 어디에 있는지 찾고 기억하기가 어려움 ▶️ 서로 밀접한 개념은 세로로 가까이 두어야 함 ‼️단, 같은 파일일 것 --> protected 변수❌
- 변수 선언: 사용하는 위치에 최대한 가까이
지역 변수
- 각 함수의 맨 처음에 선언
루프 제어 변수
- 루프문 내부에 선언
함수가 긴 경우
블록 상단이나 루프 직전에 변수 선언
인스턴스 변수(private static int num ...)
클래스 맨 처음에 선언, 중간에 두지 않음
변수 간에 세로로 거리를 두지 않음
- 함수 선언
종속 함수
한 함수가 다른 함수를 호출하면 두 함수는 세로로 가까이 배치
호출하는 함수를 호출되는 함수보다 먼저 배치
- 개념적 유사성: 개념적인 친화도가 높을수록 코드를 가까이 배치
ex. 종속성, 변수와 변수를 사용하는 함수
➡️ 명명법이 같고, 기본 기능이 유사하고 간단함 --> 종속 관계가 없어도 가까이 배치
5) 세로 순서
- 호출하는 함수를 호출되는 함수보다 먼저 선언
- 가장 중요한 개념을 가장 먼저 표현
- 세세한 사항은 가장 마지막에 표현
3. 가로 형식 맞추기
- 120자 정도로 행 길이 제한
1) 가로 공백과 밀집도
- 공백을 이용하여 밀접한 개념과 느슨한 개념 표현
//공백을 넣어서 할당 연산자 강조
total += sum;
//함수 이름과 이어지는 괄호에 사이에 공백❌: 함수와 인수가 밀접하기 때문
recordWidestLine(lineSize);
//인수가 여러 개인 경우, 강조를 위해 공백
addLine(lineSize, lineCount);
// 수식의 경우 연산자 우선순위 표시
(-b - Math.sqrt(determinant)) / (2*a);
2) 가로 정렬
- 정렬하지 않으면 중대한 결함을 찾기가 오히려 더 쉬움
3) 들여쓰기
- 짧은 if, while 등 짧은 함수에서 들여쓰기를 무시하면 안됨
4) 가짜 범위
- 빈 while 문이나 for 문: 빈 블록을 올바로 들여쓰고 괄호로 감싸야 함 --> 세미콜론을 새 행에다가 넣어서 하면 눈에 띔
while( ... )
; // 새 행으로 while 표시
'IT > 책' 카테고리의 다른 글
[Clean Code] 7장, 오류 처리 (0) | 2021.11.07 |
---|---|
[Clean Code] 6장, 객체와 자료 구조 (0) | 2021.11.05 |
[Clean Code] 4장, 주석 (0) | 2021.10.30 |
[Clean Code] 3장, 함수 (0) | 2021.10.28 |
[Clean Code] 2장, 의미 있는 이름 (0) | 2021.10.25 |