2018년 9월 1일 토요일

[The Art of Readable Code, 읽기 좋은 코드가 좋은 코드다] Intro. 코드는 이해하기가 쉬워야 한다.

많은 분들이 그러실텐데 저 역시도 항상 좋은 코드란 어떤 것인지 알고 싶었습니다. 이런 고민을 듣고 최근 회사 동료인 전상혁님이 "The Art of Readable Code"라는 책을 추천해주시기에 책을 도서관에서 빌려 읽고 있는데 정말 많이 배우고 있습니다. 책의 내용이 좋아서 한 권 사서 두고두고 읽으려 합니다.

이런 내용들을 코드에 직접 적용하면서 체득하는 것이 가장 좋겠지만 당장 단기간에 이뤄질 수 있는 일은 아니기에, 일단은 좋은 내용들이 머리에 좀 더 오래 남기를 바라며 책 내용을 정리해서 올리고자 합니다.

나중에 이 글을 찾은 분 혹은 미래의 나 스스로에게 초심자의 입장에서 어떤 점들이 도움이 되었는지를 보여줄 수 있을거라 기대합니다.

이 책은 무엇에 대한 것인가?


이 책은 매우 읽기 편한 코드를 작성하는 방법을 설명하는데요. C++, 파이썬, 자바스크립트, 자바 등을 포함한 다양한 언어로 작성된 코드를 예로 들며 설명해줍니다. 중간중간 껴있는 삽화들도 매우 재치있고 각 장의 주제와 연관되어 있어 이해를 도와줍니다.

재밌는 점은 언어들을 다 알지 못하더라도 책을 읽는 데는 별 어려움이 없다는 것입니다.
저자들이 얘기하기론 "코드의 가독성"이라는 개념 자체가 언어로부터 독립적이기 때문이라고 하지만 제가 보기엔 여기서 저자들의 내공이 드러나는 것이 아닌가 싶습니다.

크게 아래와 같이 4부로 나누어
  1. 표면적인 수준에서의 개선
  2. 루프와 로직를 단순화하기
  3. 코드를 재작성하기
  4. 선택된 주제들
여러 측면에서 코드를 이해하기 쉽게 만드는 방법을 설명해줍니다. 


가독성의 기본 정리

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

분량이 적다고 항상 좋은 것이 아닙니다. 좋은 예로 주석도 사실은 "코드를 더하는 행위"지만 코드를 더 빨리 이해하게 도와줍니다. 적은 분량으로 코드를 작성하는 것이 좋은 목표긴 하지만, 이해를 위한 시간을 최소화하는 것이 더 좋은 목표입니다.

또 다른 예로,

return exponent >=0 ? mantissa * (1 <<exponent) : mantissa / (1 << -exponent);

라는 코드보다는

if (exponent >=0) {
    return mantissa * (1 << exponent);
} else {
    return mantissa / (1 << -exponent);
}

이렇게 바꾼 코드가 앞서보다 간결하진 않지만 더 이해하기 쉽습니다.

이해를 위한 시간은 코드의 효율성, 아키텍처, 테스트의 용이성과 같은 다른 목표와 충돌할까봐 걱정할 수도 있으나, 저자들의 경험에 따르면 대다수의 경우 이러한 조건은 거의 아무런 방해가 되지 않다고 합니다.

가장 기본적인 대원칙은 코드를 "읽기 쉽게" 만드는 원리가 적용될 때마다 의심의 여지가 생기면 언제나 가독성의 기본 정리가 다른 어떤 규칙보다 앞선다는 점입니다.

"이 코드는 이해하기 쉬운가?"


만일 정리가 되지 않을 코드를 고치고 싶을 때는 먼저 뒤로 한 걸음 물러나서 스스로에게 물어보는 것이 중요합니다: "이 코드는 이해하기 쉬운가?". 만약 그렇다면 다른 코드로 건너뛰어도 별 상관이 없습니다.



댓글 없음:

댓글 쓰기