끄적끄적 코딩
Published 2024. 5. 13. 02:44
Clean Code 카테고리 없음
728x90

코드는 이해하기 쉬워야 합니다.
- 짧은 코드가 반드시 이해하기 쉬운 것은 아닙니다.

console.log(++x < size ? y++ : z - x);
++x;

if(x < size) {
  y++;
  console.log(y);
} else {
  console.log(z - x);
}

위의 코드가 아래의 코드보다 간결하나, 아래 코드가 더 이해하기 쉽습니다.

1인 프로젝트라고 하더라도, 긴 시간이 흐른후에 해당 코드를 보았을 때 낯설게 보일 수 있으므로 이해하기 쉽게 코드를 작성하는 것을 목표로 합니다.

변수, 함수, 클래스 등의 이름을 결정할 때 정보를 담아내야합니다.
- 구체적인 이름 사용
- 보편적이지 않은 단어 사용
- 접두사, 접미사로 추가적인 정보 담기

ex)
구체적인 단어
get, set 보다 구체적인 의미를 담은 단어 사용하기 
stop -> resume이 되는 경우 : pause / 되지 않는 경우 : kill 
make -> create, set up, build, generate, compose, add, new

보편적 단어 피하기
tmp, it, retval 등의 보편적인 이름을 피하기
루프반복자로 사용되는 i, j, k를 user_i, grade_i, name_i와 같이 의미를 드러내도록 함

추가적인 정보 포함하기
start -> start_ms, start_sec
size -> size_mb, size_kb
password -> plaintext_password

너무 긴 이름, 불필요한 단어 제거
너무 긴 이름은 기억하기 어려우며, 다음 줄로 넘어갈 정도로 화면을 차지 하는 경우 오히려 좋지 못합니다.
ConvertToString() -> ToString()

약어와 축약은 처음보는 사람들이 알 수 있도록하기
FrontEndUser -> FEUser라고 줄일 경우 일반적인 사람은 알지 못합니다.
string -> str과 같은 경우 흔히 사용하므로 줄여도 괜찮습니다.

오해하기 쉬운 이름
ex) filter(year <= 2011)는 잘못된 해석을 할 수 있습니다.
- year <=2011인 객체를 의미
-> 선택의 의미로 select을 사용
- year <=2011이 아닌 객체를 의미
-> 제거의 의미로 exclude를 사용

한계값
max, min

경계를 포함하는 범위
first, last

경계를 포함하고 끝은 배제하는 경우
begin, end

boolean 변수에 true와 false가 의미하는 것을 명확히 하기
read_password = true
- 패스워드를 읽어야한다.
-> need_password
- 패스워드가 이미 읽혔다
-> .user_is_authenticated

일반적으로 기대하는 결과에 맞게 작성
get, size가 붙은 함수의 경우 일반적으로 가벼운 연산으로 빠르게 동작할 것으로 예상합니다.
하지만 복잡한 계산이 들어갈 경우, compute, countSize등으로 인식시켜주는 것이 좋습니다.

보기 좋은 코드가 사용하기 더 편리합니다.
일관성과 간결성을 가지도록 합니다.
- 줄 바꿈으로 재정렬하기
- 메소드를 활용하여 불규칙성을 정리하기
- 필요에 따라 코드의 열을 맞추기
- 의미 있는 순서를 선택하기
- 선언문을 블록으로 구성하기
- 코드를 문단으로 쪼개기

주석 - 코드를 읽는 사람이 코드를 작성한 사람만큼 코드를 잘 이해하게 돕기 위함
설명하지 말아야 할 것

- 코드에서 빠르게 유추 되는 내용은 주석으로 달지 말아야 합니다.
- 설명 자체를 위한 설명을 달지 않습니다.
- 이름을 위한 주석을 달기 보다 이름을 고치는 것이 좋습니다.

머릿속에 있는 정보, 읽는 입장에서 필요한 정보
- OO보다 OO% 빠릅니다.
- 일어 날 수 있는 버그에 대한 설명
- 추가적으로 보완해야 하는 부분
- 상수가 특정한 값을 가지게 된 이유
- 예측되는 문제에 대한 부분에 대한 설명
- 쉽게 빠질 수 있는 함정에 대한 경고
- 파일이나 클래스 수준에서의 '큰 그림'을 설명하는 것도 방법

TODO: 아직 하지 않은 일
FIXME: 오동작을 일으킨다고 알려진 코드
HACK: 아름답지 않은 해결책
XXX: 문제가 있는 부분

주석을 작성하기
- 모호한 대명사는 피하기
- 함수의 동작을 명확하게 설명하기
- 구체적인 용법을 설명해주는 입/출력 예를 사용하기
- 코드의 의도를 명시하기
- 많은 의미를 함축하는 단어로 주석을 간단하게 만들기

흐름제어
인수의 순서
- 왼쪽에 유동적인 값, 오른쪽에 비교대상의 값을 주로 사용

if/els 블록의 순서
- 부정이 아닌 긍정을 선호
- 간단한 것을 먼저 처리하기
- 중요하고, 확실한 것을 우선적으로 처리하기

삼항 연산자
- 매우 간단한 경우에만 사용
- 줄 수를 최소화하는 것보다 읽는데 이해하는 시간이 길어져서는 안됨

함수 중간에서 반환하기
do/while 루프, goto 피하기
중첩을 최소화하기

검색 태그