[책요약] 읽기 좋은 코드가 좋은 코드다 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