읽기 쉬운 코드 도서 리뷰

읽기 쉬운 코드 책 사진

읽기 쉬운 코드

읽기 쉬운 코드(로버트 C.마틴 / 길벗)는 “레스토랑 예약 시스템”을 통째로 구현하는 과정을 예시로 들어 시작부터 개선과정까지를 담았습니다. 그 과정에서 어떻게 하면 좋은 코드를 짤 수 있는지를 녹여냈습니다. 프론트엔드 개발자인 제가 이 책에서 인상깊었던 내용들을 몇 자 적어보려고 합니다.

처음부터 순서대로

저는 책을 읽을 때 관심이 가는 부분을 먼저 읽는 편입니다. 하지만 이 책은 시스템을 통째로 구현하는 순서로 구성되어 있기 때문에 이미 설명했던 부분이나 이전 챕터의 코드를 참고해야 할 때가 많습니다. 그래서 처음부터 순서대로 읽으면 더 이해하기 쉬울 것입니다.

프로젝트라고 생각해서 발생하는 문제

이 책은 소프트웨어 개발을 프로젝트라고 생각하는 것이 좋지 않다고 서술합니다. 프로젝트는 시작과 끝이 있어 마지막에 도달하면 작업이 끝납니다. 하지만 성공한 소프트웨어는 지속되고 계속 유지보수해야 합니다. 그래서 오히려 정원 가꾸기에 비유합니다. 소프트웨어를 살아 있는 유기체로 보고 계속 살아가게 하기 위해서 리팩토링을 하거나 죽은 코드를 삭제하는 것에 비유할 수 있기 때문입니다.

주기적으로 의존성 갱신하기

의존성을 갱신하는 작업은 상당히 번거롭습니다. 이 책에서는 의존성 업데이트를 위한 일정을 따로 잡으라고 합니다. 그렇지 않으면 다른 업무에 우선순위가 밀려 하기 힘들 것이기 때문입니다. 이 내용에 많이 공감이 갔습니다. 의존성을 관리하지 않으면 나중에 업데이트하기가 무섭기도 하고, 업데이트 했을 때 엮여 있는 의존성들 때문에 쉽지가 않았기 때문입니다. 더군다나 프론트엔드 생태계는 라이브러리 업데이트 주기가 빠르기 때문에 더더욱 신경써야겠다는 생각을 했습니다. 회사에서 업데이트 일정을 따로 잡고 실천해보려고 합니다.

문제 해결법 - 이분법

코드에 문제가 생겼을 때 이분법을 활용할 수 있습니다.

  1. 문제를 감지하거나 재현할 방법을 찾습니다.
  2. 코드의 절반을 제거합니다.
  3. 문제가 계속되면 2단계부터 반복합니다. 문제가 해결되면 제거한 코드를 복원하고 나머지 절반을 제거한 후 다시 2단계부터 반복합니다.
  4. 문제가 재현되는 코드에서 어떤 일이 일어나는지 이해할 수 있을 정도로 충분히 코드가 작아질 때까지 반복합니다. 실제로 저도 사용하고 있던 방법인데 책에서 이렇게 이론으로 정리하니까 무척 반가웠습니다. 또한 git bisect 명령을 사용하면 보다 쉽게 결함이 있는 커밋을 찾을 수 있다는 것도 배웠습니다.

관심사의 분리

관심사의 분리 챕터 책 사진

중요한 동작을 숨기는 형태로 작성하면, 코드를 이해하기 어려워진다고 합니다. 대신에 순수 함수의 반환값이 다른 순수 함수의 입력으로 들어가는 형태를 가지는 순차적 조합이 더 읽기 쉽다고 합니다. 이것도 업무에서 적용해볼만한 부분이었습니다. 또한, 비결정적 쿼리와 부수 효과를 가진 동작들을 시스템의 바깥 부분에 가깝게 유지하고, 핵심이 되는 복잡한 논리는 순수 함수로 작성하라고 합니다. 그렇게 해서 개선한 코드를 봤을 때 뇌가 더 받아들이기 편하고 읽기 쉬웠습니다.

정리하며

책의 예상 독자가 ‘숙련도를 높이고 싶은 개발자’인만큼 한번 읽어서 소화하기에는 어려운 내용이었습니다. 하지만 여러번 읽어서 내용을 이해할 때 오는 쾌감은 더 컸습니다. 조금 느리지만 한 챕터씩 계속해서 정복해보겠습니다.


Written by@Donghoon Song
사람들의 꿈을 이어주는 코멘토에서 일하고 있습니다.

InstagramGitHubTwitterLinkedIn