Clean Code - 형식 맞추기
1. 개요
1) 형식 맞추기
- 질서정연하고 깔끔하며, 일관적인 코드를 본다면 사람들에게 전문가가 짰다는 인상을 준다.
- 프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다.
- 코드 형식을 맞추기 위한 간단한 규칙을 정하고, 팀으로 일한다면 팀이 합의한 규칙을 정해 모두가 그 규칙을 지켜야 한다.
2) 형식을 맞추는 목적
- 코드 형식은 의사 소통의 일환이며, 의사소통은 개발자의 일차적인 의무이다.
- 오늘 구현한 코드의 스타일과 가독성 수준은 유지보수의 용이성과 확장성에 지속적인 영향을 미친다.
- 코드는 사라져도 스타일과 규율을 사라지지 않는다.
2. 형식을 맞추는 방법
1) 적절한 행 길이 유지
- 소스 코드의 길이는 500줄을 넘지 않고 대부분 200줄 정도가 좋다.
- 신문 기사처럼 작성하라.
a. 최상단에 표제 -> 소스파일 이름
b. 첫 문단에는 전체 기사 내용의 요약 -> 소스 파일의 첫 부분(고차원 개념, 알고리즘의 설명)
c. 기사를 읽으며 내려갈수록 세부사항 -> 저차원 함수
- 개념은 빈 행으로 구분하라.
2) 세로 밀집도
- 줄바꿈이 개념을 분리한다면, 세로 밀집도는 연광성을 의미한다.
- 서로 밀집한 코드 행을 세로로 가까이 놓아야 한다.
3) 수직 거리
- 서로 밀집한 개념은 가까이 둬야 한다.
- 서로 밀집한 개념은 한 파일에 속해야 마땅하다. (*protected 변수를 피해야하는 이유)
- 같은 파일에 속할 정도로 밀접한 두 개념은 세로 거리로 연관성을 표현한다.
- 연관성이 깊은 두 개념이 멀리 떨어져 있으면 코드를 읽기 어렵다.
*protected 접근 제어자
- protected 피해야한다고 기술되었지만, template 패턴과 같은 하위 클래스에서 구현해야할 경우 해당 접근자를 사용
4) 변수 선언
- 변수는 사용하는 위치에서 최대한 가까이 선언한다.
public int countProducedWafer() {
int count = 0;
for (Equipment equipment : equipments)
count += equipment.getProducedWaferCount();
return count;
}
- 루프 제어 변수는 루프문 내부에 선언
def count_produced_wafer():
return sum([equipment.get_produced_wafer_count() for equipment in equipments])
- 파이썬 예제를 작성하다 보니 데이터 타입을 선언하는 부분도 없고, list comprehension을 주로 사용하기 때문에 루프문 안에 변수를 선언하게 된다.
for equipment in factory.get_equipment_list():
wafers = equipment.get_produced_wafers("2020-05-10", "2020-05-15")
produeced_wafers = filter_invalid_wafers(wafers)
for wafer in produeced_wafers:
wafer.tune_wafer_info()
for wafer in produeced_wafers:
wafer.analysis_loss()
- 긴 함수에서는 블록 상단 또는 루프 직전에 변수를 선언할 수도 있다.
5) 인스턴스 변수
- 변수 간 세로로 거리를 두지 않는다.
- 잘 설계한 클래스는 대다수 클래스 메서드가 인스턴스 변수를 사용한다.
- 잘 알려진 위치(자바의 경우 클래스 상단)에 인스턴스 변수를 모으는 것이 중요하다.
6) 종속 함수
- 한 함수가 다른 함수를 호출한다면 종속함수이다.
- 종속 함수는 세로로 가까이 배치한다.
- 종속 함수를 뒤쪽에 배치하면 가독성이 높아진다.(고차원 -> 저차원)
class Lot():
...
def set_lot_overhead(self):
previous_lot = self.__get_previous_lot()
lot_overhead = self.__start_time - previous_lot.get_end_time()
def __get_previous_lot(self):
...
def get__end_time(self):
...
7) 개념의 유사성
- 개념적인 친화도가 높을수록 코드를 가까이 배치한다.
- 종속 함수, 변수, 그 변수를 사용하는 함수가 예이다.
- 그 외에도 비슷한 동작을 수행하는 함수 또한 친화도가 높다고 말할 수 있다.
8) 가로 형식 맞추기
(1) 가로 공백과 밀집도
- 할당 연산자 좌우로 공백을 주어 왼쪽, 오른쪽 요소를 확실히 구별한다.
- 함수 이름과 괄호 사이에는 공백을 없앰으로써 함수와 인수의 밀접함을 보여준다.
- 함수 괄호 안의 인수끼리는 쉼표 사이 공백을 통해 별개라는 사실을 보여준다.
9) 들여쓰기
- 들여쓰기를 잘 해놓으면 구조가 한 눈에 들어오고 가독성이 높아진다.
- 파이썬을 경우 들여쓰기로 블록을 구별해서 당연한 얘기처럼 들릴 수 있지만, PEP8 규정에 따라 한 라인에 79자를 넘지 않는 수준에서 개발하다보면 하나의 코드 줄에 개행이 발생할 수 있는데 적절한 들여쓰기로 하나의 라인임을 보여줄 수 있도록 한다.
10) 가짜 범위
- 빈 while문이나 for문은 가능한 피하는 것이 좋다.
- 사용하게 될 경우 빈 블록을 올바로 들여쓰고 괄호로 감싼다.
'Architecture' 카테고리의 다른 글
[Clean Code 정리] 오류 처리 (0) | 2022.05.29 |
---|---|
[Clean Code 정리] 객체와 자료구조 (0) | 2022.05.29 |
[Clean Code 정리] 주석 (0) | 2022.05.28 |
[Clean Code 정리] 함수 (0) | 2022.05.28 |
[Clean Code 정리] 의미있는 이름 (0) | 2022.05.28 |
댓글