본문 바로가기

컴퓨터공학/기타

CleanCode> Comments & Code Formatting , Length & Parameters

차례

1. 이름

Variables, Functions, Classes 

2. 형식과 주석

: Code formatting, Good & Bad comments

3. 함수

: Length, Parameters

4. 조건문 & 에러처리

: Deep nesting, Missing error handling

5. 클래스와 데이터 구조

: Missing distinction, Bloated classes

 


2. Comments & Code Formatting

잘못된 주석 작성법

1. 과도한 정보

이름에 있는 내용을 주석에도 쓸 필요는 없다. 

2. Dividers/ Block Markers

코드에 있는데 굳이 주석으로 표시할 필요없다.

3. 실제 내용과 다른 주석

4. 예전 코드

버전관리 프로그램이 잘 되어 있으니 옛날 코드는 과감히 지우자

 

 

 

좋은 주석 작성법

1. 법적 정보 표시

2. 이름으로 표현할 수 없는 설명

3. 주의

4. 해야할 것들 메모

 


Code formatting이란?

가독성을 향상하는 것과 의미를 변환하는 것이다.

formatting은 두 가지 종류가 있다.

 

Vertical Formatting 

: 라인 사이에 띄여쓰기, 코드 그룹화

다양한 개념이 있으면 파일 분할을 고려

다른 개념은 띄여쓰기로 분할

비슷한 개념은 분할 금지

 

 

Horizontal Formatting 

: 한 줄로 표현하기 

들여쓰기, 코드 사이에 띄여쓰기, 라인 폭 등

스크롤링없이 읽을 수 있어야 한다.

매우 긴 문장은 피한다. 

들여쓰기 적극 활용

긴 문장은 여러 개로 나누고 합친다. 예를 들면 변수에 저장하고 나중에 모두 합친다거나.

 

 

Fromatting은 언어에 따라서 다르다. 


3. Length, Parameters

1. parameter 갯수를 최소화할 것

 

1) 파라미터 2개를 1개로

에러인지 로그인지 바로 알아먹기 힘들다.

메서드를 나누고 사용

 

 

2) parameter가 많은 경우

예를 들어 이런 코드가 있다면

만든 사람이야 이름, 나이, 이메일인 것을 알지만 헷갈릴 수 있고 다른 사람이 봤을 때 직관적이지 않으며 순서를 맞춰야 한다. 

 

반면에 위 방식은 순서를 안 지켜도 되고 직관적이다. 어떤 데이터인지 알 수 있다.  

3개의 파라미터를 1개로 줄였다.

 

 

일반적으로 이런 방식을 생각한다.

다만 데이터값만 있으니 메소드를 사용할 때 뭐가 뭔지 헷갈리고 알 수 없다. 

dictionary 형태로 대입하고 변수로 추출해서 사용하는 방식

이런 방식을 사용할 것

 

 

3) 파라미터 갯수가 동적일 경우

 

 

 

2. Abstraction level

 

high level, low level 함수가 있는데

여기서 level은 추상 수준을 의미한다.

low level function은 부품 일부분이라고 생각.  

low level 이름만 보고 이 함수가 뭐하는 지 알기 힘들지만

high level 안에 low level이 있을 경우, 

low level 과 high level 이름을 같이 볼 때 얘가 뭐하는 함수인지 이해되면 좋은 설계이다.

그리고 설계할 때 계층 차이가 큰 함수를 섞어서 쓰지 말자. 

읽을 때 추가 해석하거나 이해하는 과정이 없을 수록 좋다 .

 

이 예시는 안 좋은 예시

추상 단계 차이가 있으면 안 좋음

모범 예시

lowLevel을 바로 쓴 게 아니라 함수로 따로 만들어서 if문에 넣었다.

주변이 saveNewUser라는 메소드가 있으니 그 수준에 맞게 함수를 새로 파서 넣은 것.

 

 

 

 

예시

createUser 메소드에 inputIsValid, showErrorMessage, saveUser 메소드로 같은 수준으로 맞춰져있다.

inputIsValid, showErrorMessage, saveUser 각각 메소드 안에는 lowLevel 코드가 들어 있다.

즉, abstraction level을 맞춰주는게 중요하다!!

 

 

같은 기능에서 작동하는 코드는 뺀다.

주변 코드보다 좀 더 많은 해석이 필요한 코드는 뺀다. 주변 abstraction level을 맞춘다.

 

 

코드를 볼 때 어떤 의미인지 생각하게 만드는 코드는 가독성이 안 좋은 코드.

 

 

입력값을 조건문으로 판별해서 결과값을 나누는 형태보다

함수를  쪼개고 필요한 곳에서 사용하는 방식 적용

inputValid 안에 email과 Password Valid를 만들어서 Abstraction level을 맞추는 방식 적용.

 saveUser 메소드 안에 database.insert와 buildUser가 적절한 level을 맞추고 있다.

buildUser 안에 low level로 처리.

 

 

뒷 부분을 이렇게 대체할 수 있는데

비슷한 함수 이름을 여러 개 사용하는 것보다 더 낫다.