책 '읽기 좋은 코드가 좋은 코드다 ' 내용 중 기억에 남는 내용이나 잘 몰랐던 부분에 대해서 정리한 내용임.
변수/메소드명 지을 때 쓸 수 있는 상황에 더 적합한 '화려한' 단어의 예시
- send : deliver, dispatch, announce, distribute, route
- find : search, extract, locate, recover
- start : launch, create, begin, open
- make : create, set up, build, generate, compose, add, new
인덱스 변수로 i, j, k를 쓰는 것은 좋지만 중첩 루프로 어떤 변수에 어떤 인덱스 변수가 사용되는지 알기 힘들다면, 인덱스 변수명에 사용될 변수의 앞자리를 붙여서, ci, mi, ui 이런식으로 하면 좋다.
이름이 $만으로 이루어진 jQuery 라이브러리 함수를 호출할 때 jQuery 결과 저장 변수 앞에 $를 붙이는 관습은 상당히 유용함.
var $all_images = $("img");
filter()는 모호하므로 고르는 기능이라면 select(), 제거하는 기능이라면 exclude()가 낫다.
한계값 설정 변수이름에 LIMIT보다 MIN, MAX를 붙이는게 낫다. LIMIT는 그 값을 포함하는지 아닌지 여부가 모호해서.
경계를 포함하는 범위에는 first(포함), last(포함)를 사용하라.
경계를 포함하고/배제하는 범위에는 begin(포함), end(배제)를 사용하라.
주석은 다음과 같은 내용을 달자
- 코드가 특정한 방식으로 작성된 이유
- 코드에 담긴 결함
- 읽는 사람이 의문이 들만한 부분에 대한 설명
- 파일, 클래스 구조에 대한 큰 그림 설명
- 장황한 함수 동작 설명보다는 입출력 예제로 설명
조건문에서 인수의 순서는 다음과 같이 하는게 읽기 쉬움(영어 어순과 일치)
- 왼쪽 : 유동적인 값
- 오른쪽 : 고정적인 값, 비교대상으로 사용되는 표현
줄 수를 최소화하는 일보다 다른 사람이 코드를 읽고 이해하는데 걸리는 시간을 최소화하는게 더 중요!
do/while 루프는 읽기 힘드므로 while 루프로 작성하자(대부분의 do/while은 while로 작성될 수 있다)
설명 변수, 요약 변수를 사용하자(username 같은 변수)
username = line.split(':')[0].strip()
if username == "root":
...
드모르간의 법칙을 사용해서 조건문을 간단하게 하자
- not (a or b or c) == (not a) and (not b) and (not c)
- not (a and b and c) == (not a) or (not b) or (not c)
프로그램 로직을 평범한 말로 설명하고 그 설명으로 자연스러운 코드를 작성하는 테크닉은 상당히 유용하다!
자신의 문제를 쉬운 말로 설명할 수 없으면 해당 문제는 무언가 빠져 있거나 제대로 정의되지 않은 것이다.
모든 케이스에 대해 처리하는 복잡하고 완벽한 코드를 짜는 대신 요구사항을 처리할 수 있는 수준의 간단한 코드를 짜라.
테스트 코드는 테스트 내용에 집중할 수 있도록 간결하게 짤 수 있도록 하자
- 이상적으로는 한 줄로 테스트 내용이 표현되는게 좋음
- 더 쉽게 테스트 케이스를 추가할 수 있게 된다
코드양은 많지만 성능은 훨씬 뛰어나고 설계도 더 유연하다면
이는 언제나 긍정적인 변화다. 읽기 쉬운 100줄 코드는 읽기 어려운 50줄 코드에 비해 훨씬 낫다.
문제 해결을 위해 여러 클래스를 사용하면 상호 간 존재하는 복잡성 문제가 있다.
하지만 클래스1 -> 클래스2 -> 클래스3 처럼 선형 관계라면 크게 복잡하게 느껴지지 않는다.
'개발 > 리팩토링' 카테고리의 다른 글
클린 코드 독서 노트 (0) | 2017.08.30 |
---|---|
클린 코드 - 2장 의미 있는 이름 요약 (0) | 2017.05.18 |
네이밍 관련 글 정리 (0) | 2017.05.08 |
자바 코드 리팩토링 시 주의해야할 점 몇 가지 (0) | 2016.11.03 |