May 13, 2024
읽기 쉬운 코드(로버트 C.마틴 / 길벗)는 “레스토랑 예약 시스템”을 통째로 구현하는 과정을 예시로 들어 시작부터 개선과정까지를 담았습니다. 그 과정에서 어떻게 하면 좋은 코드를 짤 수 있는지를 녹여냈습니다. 프론트엔드 개발자인 제가 이 책에서 인상깊었던 내용들을 몇 자 적어보려고 합니다.
저는 책을 읽을 때 관심이 가는 부분을 먼저 읽는 편입니다. 하지만 이 책은 시스템을 통째로 구현하는 순서로 구성되어 있기 때문에 이미 설명했던 부분이나 이전 챕터의 코드를 참고해야 할 때가 많습니다. 그래서 처음부터 순서대로 읽으면 더 이해하기 쉬울 것입니다.
이 책은 소프트웨어 개발을 프로젝트라고 생각하는 것이 좋지 않다고 서술합니다. 프로젝트는 시작과 끝이 있어 마지막에 도달하면 작업이 끝납니다. 하지만 성공한 소프트웨어는 지속되고 계속 유지보수해야
합니다. 그래서 오히려 정원 가꾸기에 비유합니다. 소프트웨어를 살아 있는 유기체로 보고 계속 살아가게 하기 위해서 리팩토링을 하거나 죽은 코드를 삭제하는 것에 비유할 수 있기 때문입니다.
의존성을 갱신하는 작업은 상당히 번거롭습니다. 이 책에서는 의존성 업데이트를 위한 일정을 따로 잡으라
고 합니다. 그렇지 않으면 다른 업무에 우선순위가 밀려 하기 힘들 것이기 때문입니다. 이 내용에 많이 공감이 갔습니다. 의존성을 관리하지 않으면 나중에 업데이트하기가 무섭기도 하고, 업데이트 했을 때 엮여 있는 의존성들 때문에 쉽지가 않았기 때문입니다. 더군다나 프론트엔드 생태계는 라이브러리 업데이트 주기가 빠르기 때문에 더더욱 신경써야겠다는 생각을 했습니다. 회사에서 업데이트 일정을 따로 잡고 실천해보려고 합니다.
코드에 문제가 생겼을 때 이분법을 활용할 수 있습니다.
git bisect
명령을 사용하면 보다 쉽게 결함이 있는 커밋을 찾을 수 있다는 것도 배웠습니다.중요한 동작을 숨기는 형태로 작성하면, 코드를 이해하기 어려워진다고 합니다. 대신에 순수 함수의 반환값이 다른 순수 함수의 입력으로 들어가는 형태를 가지는 순차적 조합이 더 읽기 쉽다고 합니다. 이것도 업무에서 적용해볼만한 부분이었습니다. 또한, 비결정적 쿼리와 부수 효과를 가진 동작들을 시스템의 바깥 부분에 가깝게 유지하고, 핵심이 되는 복잡한 논리는 순수 함수로 작성하라
고 합니다. 그렇게 해서 개선한 코드를 봤을 때 뇌가 더 받아들이기 편하고 읽기 쉬웠습니다.
책의 예상 독자가 ‘숙련도를 높이고 싶은 개발자’인만큼 한번 읽어서 소화하기에는 어려운 내용이었습니다. 하지만 여러번 읽어서 내용을 이해할 때 오는 쾌감은 더 컸습니다. 조금 느리지만 한 챕터씩 계속해서 정복해보겠습니다.