읽기 좋은 코드가 좋은 코드다 리뷰(읽는중)

The Art of Readable Code(더 나은 코드를 작성하는 간단하고 실전적인 테크닉)

NHN Open Talk Day 행사에 참여해서 선물로 받은 읽기 좋은 코드가 좋은 코드다( 더스틴 보즈웰, 트레버 파우커 지음. 임백준 옮김. 한빛미디어 출판) 요약 정리 및 리뷰입니다.


코드는 이해하기 쉬워야한다.

1 가독성의 기본 정리

  • 코드는 다른 사람이 그것을 이해하는 데 들이는 시간을 최소화하는 방식으로 작성되어야 한다.
  • 적은 분량으로 코드를 작성하는 것이 좋은 목표긴 하지만, 이해를 위한 시간을 최소화하는게 더 좋은 목표다.

Part One 표면적 수준에서의 개선

  • 표면적 수준이란 좋은 이름을 짓고, 좋은 설명을 달고, 코드를 보기 좋게 정렬하는 것들을 의미한다.

2 이름에 정보를 담아내라.

  • 특정한 단어 고르기 (구체적인 단어를 선택하여 ‘무의미한' 단어를 피하라)
  • tmp, retval같은 보편적인 이름 피하기 (혹은 언제 그런 이름을 사용해야 하는지 깨닫기)
  • 추상적인 이름 대신 대상을 자세히 묘사하는 구체적인 이름 사용하기
  • 변수명에 접두사 혹은 접미사로 세부 정보 덧붙이기 (단위를 포함하는 값들, 다른 중요한 속성 포함하기)
  • 사용 범위가 넓으면 긴 이름 사용하기 (좁은 범위에서는 짧을수록 좋다)
  • 이름 포맷팅으로 의미를 전달하기 (밑줄, 대시, 대문자 활용)

3 오해할 수 없는 이름들

  • 본인이 지은 이름을 “다른 사람들이 다른 의미로 해석할 수 있을까?”라는 질문을 던져보며 철저하게 확인해야 한다.
  • 한계를 설정하는 이름을 가장 명확하게 만드는 방법은 제한받는 대상의 이름 앞에 max나 min을 붙이는 것이다.
  • 경계를 포함하는 범위에는 first와 last를 사용하라
  • 경계를 포함하고/배제하는 범위에는 begin과 end를 사용하라
  • 불리언 변수에 이름 붙이기 (is, has, can, should, 부정적 용어 피하기)
  • 사용자의 기대에 부응하기 (get(), size() 등)
  • 언제나 의미가 오해되지 않는 이름이 최선의 이름이다.

4 미학

  • 코드를 읽는 사람이 이미 친숙한, 일관성 있는 레이아웃을 사용하라
  • 여러 블록에 담긴 코드가 모두 비슷한 일을 수행하면, 실루엣이 동일해 보이게 만들어라.
  • 서로 연관된 코드는 하나의 블록으로 묶어라.
  • 미학적으로 보기 좋은 코드가 사용하기 더 편하다는 사실은 명백하다.
  • 코드를 ‘보기 예쁘게' 만드는 작업은 표면적인 개선 이상의 결과를 가져온다 (코드의 구조 자체를 개선시킨다)
  • 코드 곳곳을 ‘열’로 만들어서 줄을 맞추면 코드를 한 눈에 훑어보기 편하다.
  • 코드의 한곳에서 A, B, C가 이 순서대로 언급되고 있으면, 다른 곳에서 B, C, A와 같은 식으로 언급 하지 말라. 의미 있는 순서를 정하여 모든 곳에서 그 순서를 지켜라
  • 선언문을 블록으로 구성하라
  • 빈 줄을 이용하여 커다란 블록을 논리적인 ‘문단'으로 나누어라
  • 일관성 있는 스타일은 ‘올바른' 스타일보다 더 중요하다

5 주석에 담아야 하는 대상

  • 주석의 목적은 코드를 읽는 사람이 코드를 작성한 사람만큼 코드를 잘 이해하게 돕는 데 있다.
  • 주석은 코드를 읽는 사람에게 코드의 질이나 상태 그리고 추후 개선 방법 등을 제시하여 소중한 통찰을 제공한다
  • 코드에서 빠르게 유추할 수 있는 내용은 주석으로 달지 말라
  • 설명 자체를 위한 설명을 달지 말라
  • 나쁜 이름에 주석을 달지 마라 — 대신 이름을 고쳐라 (좋은 코드 > 나쁜코드 + 좋은 주석)
  • 생각을 기록하라
  • 코드가 특정한 방식으로 작성된 이유를 설명해주는 내용 (감독의 설명)
  • 코드에 담긴 결함
  • 어떤 상수가 특정한 값을 갖게 된 ‘사연'
프로그래머 사이에서 널리 사용되는 코드에 담긴 결함 표시
TODO: 아직 하지 않은 일
FIXME: 오동작을 일으킨다고 알려진 코드
HACK: 아름답지 않은 해결책
XXX: 위험! 여기 큰 문제가 있다
TextMate: ESC
  • 코드를 읽는 사람의 입장이 되어라 (코드를 처음으로 읽는 외부인의 입장에 자기 자신을 놓는 기법)
* 코드를 읽는 사람이 자기가 작성한 코드의 어느 부분을 보고 ‘뭐라고?’라는 생각을 할지 예측해보고 그 부분에 주석을 추가하라
* 사람들이 쉽게 빠질 것 같은 함정을 경고하라
* 평범한 사람이 예상하지 못할 특이한 동작을 기록하라
* 파일이나 클래스 수준 주석에서 ‘큰 그림'을 설명하고 각 조각이 어떻게 맞춰지는지 설명하라
* 코드에 블록별로 주석을 달아 세부 코드를 읽다가 나무만 보고 숲은 못보는 실수를 저지르지 마라
  • 상세하고 공식적인 문서를 작성해야 한다는 생각에 압도당하지 말라. 잘 선택된 몇몇 문장이 아무것도 없는 것보다는 훨씬 나은법이다
  • 사람들이 코드를 더 쉽게 읽을 수 있다면 그것이 무엇이든 상관없이 기꺼이 설명하라
  • 글 쓰는 두려움을 떨쳐내라 — 일단 쓰기 시작하라
1. 마음에 떠오르는 생각을 무조건 적어본다.
2. 주석을 읽고 무엇이 개선되어야 하는지 (그런부분이 있다면) 확인한다.
3. 개선한다.

6 명확하고 간결한 주석 달기


Part Two 루프와 논리를 단순화 하기

7 읽기 쉽게 흐름제어 만들기

8 거대한 표현 잘게 쪼개기

9 변수와 가독성


Part Three 코드 재작성하기

10 상관없는 하위문제 추출하기

11 한번에 하나씩

12 생각을 코드로 만들기

13 코드 분량 줄이기


Part Four 선택된 주제들

14 테스트와 가독성

15 ‘분/시간 카운터'를 설계하고 구현하기

추가적인 도서목록