본문 바로가기
개발 관련 공부/클린코드

클린코드 5장

by 슴새 2022. 9. 15.
반응형
이 포스트는 2021.12~2022.09 기간동안 벨로그에 작성한 글을 티스토리에 옮겨 적은 것입니다.

클린코드 5장

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

형식을 맞추는 목적

오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 코드 형식은 의사소통의 일환이고 의사소통은 전문 개발자의 일차적인 의무이다.

적절한 행 길이를 유지하라

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

🔎 신문 기사처럼 작성하라
신문을 읽을 때를 생각해보자. 최상단에 기사를 요약하는 표제가 나오고,첫 문단은 전체 기사 내용을 요약한다. 쭉 읽으며 내려가면 세세한 사실이 조금씩 드러난다.

소스파일도 신문 기사와 비슷하다. 이름은 간단하면서도 설명이 가능하게 짓는다. 소스 파일 첫부분 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 묘사한다.

🔎개념은 빈 행으로 분리하라
생각 사이는 빈 행을 넣어 분리해야 마땅하다. 빈 행을 빼버리면 코드 가독성이 현저하게 떨어진다.

🔎세로 밀집도
줄바꿈이 개념을 분리한다면 세로 밀집도는 연관성을 의미한다. 즉, 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다는 뜻이다.

🔎수직 거리
함수나 변수가 정의된 코드를 찾으려 소스 파일을 위아래로 뒤지는 뺑뺑이를 돌아 본 적이 있는가? 이 조각 저 조각이 어디에 있는지 찾고 기억하느라 시간과 노력을 소모하는 건 달갑지 않다.. 서로 밀접한 개념은 세로로 가까이 둬야 한다.

  • 변수 선언: 변수는 사용하는 위치에 최대한 가까이 선언한다.
    • ex: 루프를 제어하는 변수는 루프 문 내부에..
  • 인스턴스 변수(=클래스에 정의된 변수): 인스턴스 변수는 클래스 맨 처음에 선언한다.
    • 인스턴스 변수를 선언하는 위치에는 논쟁이 있는데, 어쨋든 잘 알려진 위치에 인스턴스 변수를 모은다는 사실이 중요하다.
  • 종속 함수: 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다. 가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다.
  • 개념적 유사성: 종속 관계가 아니더라도, 비슷한 동작을 수행하는 일군의 함수 등은 개념적인 친화도가 높다. 가까이 배치하자.

🔎세로 순서
일반적으로 호출 되는 함수를 더 뒤에 배치한다. 그러면 소스 코드 모듈이 고차원에서 저차원으로 자연스럽게 내려간다.

가로 형식 맞추기

가로 길이는 짧아야 좋다.

🔎가로 공백과 밀집도
가로로는 공백을 사용해 밀접한 개념과 느슨한 개념을 표현한다. 예를 들어.. addLine(lineSize, lineCount) 라는 함수 호출 코드가 있을때, 파라미터 사이를 공백 하나로 분리한 모습을 볼 수 있다.

🔎가로 정렬
변수 길이가 들쭉날쭉이라 정렬하고 싶을 수도 있다. 예를 들면

private		Socket			socket;
private		InputStream		input;
...

이렇게 공백을 좀 뒤서 세로로 열이 맞게 하고 싶을 수도 있다. 나도 c언어로 뭔가 출력하는 과제를 할때 이런식으로 가로 너비를 맞추곤 했던 기억이 있다.
근데 사실, 별 쓸데 없다. 정렬하지 않아야 오히려 결함을 찾기 쉽다.

private Socket socket;
private InputStream input;
...

그냥 이렇게 쓰자.

🔎들여쓰기
우리는 범위로 이뤄진 계층을 표현하기 위해 코드를 들여쓴다. 이렇게 하면 이 범위에서 저 범위로 재빨리 이동할 수 있다. 현재 상황과 무관한 코드 블럭을 일일이 살펴볼 필요가 없다. 들여쓰기를 잘하자..

팀 규칙

프로그래머라면 각자 선호하는 규칙이 있지만, 팀에 속한다면 팀 규칙을 따라야 한다. 팀이 한 가지 규칙에 합의해야 소프트웨어가 일관적인 스타일을 보인다.

반응형

'개발 관련 공부 > 클린코드' 카테고리의 다른 글

클린코드 8장  (1) 2022.09.16
클린코드 7장  (0) 2022.09.15
클린코드 4장  (0) 2022.09.15
클린코드 3장  (0) 2022.09.15
클린코드 2장  (0) 2022.09.15

댓글