클린코드 스터디 - 005

2 분 소요

5장 형식 맞추기

형식을 맞추는 목적

코드형식 —> 의사소통 —> 개발자의 의무

맨 처음 잡아놓은 형식 —> 용이성과 확장성에 지속적인 영향을 미침

원활한 소통을 장려하는 코드 형식

적절한 행 길이 유지

행의 크기는 클래스의 크기와 밀접하다. 즉, 행 길이가 길 수록 파일의 크기가 커진다.

위 표를 통해, 행 길이가 짧아도 JUnit, FitNesse와 같이 200줄 정도로 커다란 시스템을 만들 수 있는 것을 알 수 있다.

신문 기사처럼 작성하기

신문을 읽어내려 갈수록 요약 —> 세부사항을 나타나는 것처럼, 소스코드 또한 고차원 —> 저차원의 수준으로 나타내라.

신문처럼 형식 없이 긴 기사만 쓴다면 아무도 보지 않듯, 코드 또한 형식없이 한 주제로 긴 코드만 있다면 아무도 읽지 않을 것이다.

개념은 빈 행으로 구분하기

일련의 행 묶음은 완결된 개념을 표현한다.

이러한 개념은 행간 구분(줄바꿈)으로 구분해야 한다.

세로 밀집도

줄바꿈 : 개념 분리 = 세로 밀집도 : 연관성

서로 밀접한 코드 행은 세로로 가까이 놓여야 한다.

수직 거리

서로 밀접한 개념은 세로로 가까이 놓여야 한다. [예외 : 밀접한 두 개념이 서로 다른 파일에 속해있을 때]

하지만, 타당한 근거가 없다면, 서로 밀접한 개념은 한 파일에 속해야 한다.

같은 파일에 속할 정도로 밀접한 두 개념이라면, 세로 거리로 연관성을 표현한다.

  • 변수 선언

사용하는 위치에 최대한 가까이 선언.

  • 인스턴스 변수

일반적으로 C++에서는 클래스의 마지막에 인스턴스 변수를 선언한다는 가위규칙을 적용하고, 자바에서는 보통 클래스의 맨 처음에 인스턴스 변수를 선언한다.

위치는 둘 다 좋지만, 한군데에만 잘 모아놓는 것이 중요하다.

  • 종속 함수

어떤 함수 A가 다른 함수 B를 호출하는 관계라면 세로로 가깝게 배치한다.

이때, 호출하는 함수 A가 호출되는 함수B 위에 놓여져야 한다.

이는 신문기사처럼의 규칙과 일맥상통하다.

소스코드는 위에서 아래로 갈수록, 고차원 —> 저차원으로 자연스럽게 내려가도록 한다.

  • 개념적 유사성

개념적으로 친화도가 높은 아래 소스와 같은 경우 가까이 배치하는 것이 좋다.

일군의 함수는 친과도와 명명법이 똑같고, 기본 기능이 유사하므로 아래와 같이 배치해야한다.

서로가 호출하는 관계는 종속적인 관계가 아니더라도 가까이 배치한다.

가로 형식 맞추기

짧은 행이 바람직하다.

가로 공백과 밀집도

가로는 공백을 사용하여, 밀접/느슨한 개념을 표현한다.아래 코드를 보면, 연산자를 강조하는 부분에는 앞뒤에 공백이 있다.

반면, 함수이름과 이어지는 괄호 사이에는 함수와 인수가 서로 밀접하기에 공백을 넣지 않았다.

연산자 우선순위를 강조하기 위해서도 공백을 사용한다.

가로정렬

가로정렬은 코드의 엉뚱한 부분을 강조할 수 있기에 사용하지 않는 편이 좋다.

만일 소스를 보기 어려울 정도로 뼌수들의 선언부가 길어진다면, 클래스 자체를 나누는 편이 더 효과적일 수 있다.

들여쓰기

범위로 이루어진 계층을 표현하기 위해 들여쓰기를 한다.

들여쓰기 무시하기

간단한 if문이나 짧은 while문, 짧은 함수에서 들여쓰기를 무시하지 않는 것이 좋다.

//이것보다
class PrettyAyeon {
	var name : String = { return "beautifulNoseAyeon" }
}

//이렇게 쓰는 것이 좋다. 난 근데 위가 더 좋댱ㅎ
class PrettyAyeon {
	var name : String = {
			return "beautifulNoseAyoen"
	}
}

가짜 범위

비어있는 while, for, if문의 경우 빈 블록을 올바로 들여쓰고 알맞은 괄호 쓰자!

규칙

개개인이 선호하는 형식 규칙들이 있다. Buttt, 팀에 있으면 팀 규칙을 따라야 한다.

합의해서 정해도 조타아~~~

참고