IT/책

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

Terriermon 2021. 10. 30. 04:02

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