[책요약] 읽기 좋은 코드가 좋은 코드다 1장 코드는 이해하기 쉬워야 한다

2020-04-16

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

1.1 무엇이 코드를 ‘더 좋게’ 만드는가?

for (Node* node = list->head; node != NULL; node = node->next)
    Print(node->data);
Node* node = list->head;
if (node == NULL) return;

while(node->next != NULL) {
    Print(node->data);
    node = node->next;
}
if (node == NULL) return;
  • 두 코드는 완전히 동일한 일을 수행하고 있다. 첫번째 코드가 두번째 코드보다 더 낫다.

return exponent >= 0 ? mantissa * (1 << exponent) : mantissa / (1 << -exponent);
if (exponent >= 0) {
    return mantissa * (1 << exponent);
} else {
    return mantissa / (1 << -exponent);
}
  • 어떤 코드가 더 좋을까?

1.2 가독성의 기본 정리

코드는 다른 사람이 그것을 이해하는 데 들이는 시간을 최소화하는 방식으로 작성되어야 한다.

  • 여러분의 평범한 동료 한 사람이 여러분이 작성한 코드를 읽고 이해하는 데 걸리는 시간을 측정해 보아라
  • 그 시간이 ‘이해를 위한 시간’이며, 여러분이 최소화해야 하는 값이다.
  • ‘이해’
    • 코드를 자유롭게 수정하고,
    • 버그를 짚어내고,
    • 수정된 내용이 여러분이 작성한 다른 부분의 코드와 어떻게 상호작용하는지 알 수 있어야 한다는 사실을 의미
  • ‘누가 내 코드를 이해하는 말든 무슨 상관이야? 어쨋든 그 코드를 사용하는 사람은 나밖에 없다고!’ 라고 생각할 수도 있다.
  • 하지만 심지어 1인 프로젝트를 수행하고 있다고 해도, 이러한 목표를 추구하는 일은 의미가 있다.
  • 자신이 작성한 코드가 6개월 후에 낯설게 보인다면, 여기서 말하는 ‘어떤 사람’이 바로 자기 자신이 될 수도 있다.
  • 다른 사람이 프로젝트에 합류할 수도 있고,
  • 내 코드가 다른 프로젝트에 사용 될지도 모른다.

1.3 분량이 적으면 항상 더 좋은가?

  • 일반적으로, 더 분량이 적은 코드로 똑같은 문제를 해결할 수 있다면 그것이 더 낫다.
  • 코드가 5,000줄일 때보다 2,000줄일 때 더 빨리 이해하기 때문이다(13장 ‘코드 분량 줄이기’ 참고)
  • 하지만 분량이 적다고 항상 더 좋은 것은 아니다!
assert((!(bucket = FindBucket(key))) || !bucket->IsOccupied());
bucket = FindBucket(key);
if (bucket != NULL) assert(!bucket->IsOccupied());
  • 위의 한 줄짜리 코드를 이해하는데 걸리는 시간이 아래의 두 줄짜리 코드를 이해할 때보다 더 많은 시간이 걸릴 수도 있다.

  • 주석처리는 ‘코드를 더하는’ 행위지만 코드를 더 빨리 이해하게 도와주기도 한다.
// "hash = (65599 * hash) + c"의 빠른 버전
hash = (hash << 6) + (hash << 16) - hash + c;
  • 적은 분량으로 코드를 작성하는 것이 좋은 목표긴 하지만, 이해를 위한 시간을 최소화하는 게 더 좋은 목표다.

1.4 이해를 위한 시간은 다른 목표와 충돌하는가?

  • 이런 생각을 할지도 모르겠다
    • 코드의 효율성, 잘 구성된 아키텍처, 테스트의 용이성 등의 다른 제약 조건도 고려해야 하지 않을까?
    • 이러한 조건들이 때로는 이해하기 쉬운 코드 작성과 충돌을 일으키지 않을까?
  • 이러한 조건들은 거의 아무런 방해가 되지 않는다.
  • 고도로 최적화된 코드조차도 이해하기 쉽게 만드는 방법이 있다.
  • 코드를 읽기 쉽게 만드는 노력은 종종 잘 구성된 아키텍처와 테스트하기 쉬운 코드를 작성하게 도와주기도 한다.

1.5 어려운 부분

  • 상상속에 존재하는 다른 어떤 사람이 여러분의 코드를 읽고 이해하기 쉬운지 따져보려면 당연히 추가적인 시간과 노력이 든다.
  • 여러분은 지금까지 코딩하면서 이러한 상상력을 발휘한 적이 없기 때문에 종전과는 다른 사고 능력이 필요할 것이다.
  • 여러분이 우리처럼 이러한 목표를 받아들이면, 더 나은 프로그래머로서 전보다 적은 버그를 양산하고, 자신의 코드를 더 자랑스러워 하며, 여러분의 주변 사람들이 사용하기 원하는 코드를 만들어낼 수 있다.

Comments