깨끗한 코드는 속도를 늦추지 않는다

클린 코드에서 가장 먼저 남는 문장은 “빨리 가는 유일한 방법은 코드를 깨끗하게 유지하는 것”이라는 말이다. 처음에는 품질과 속도가 서로 반대처럼 느껴진다. 급한 일정에서는 일단 돌아가게 만들고 나중에 정리하고 싶어진다. 하지만 그 “나중”이 쌓이면 작은 수정도 오래 걸리고, 코드를 읽는 시간보다 추측하는 시간이 길어진다.

깨끗한 코드는 멋진 구조를 과시하는 코드가 아니라 다음 사람이 의도를 빠르게 파악하고 안전하게 고칠 수 있는 코드에 가깝다. 결국 코드는 한 번 작성되고 끝나는 문서가 아니라 계속 읽히고 바뀌는 대상이기 때문이다.

단순한 규칙에서 시작하기

책에서는 켄트 벡의 네 가지 규칙을 소개한다. 모든 테스트를 통과하고, 중복을 없애고, 프로그래머의 의도를 드러내고, 클래스와 메서드 수를 줄이라는 내용이다. 이 규칙들은 거창한 설계 원칙이라기보다 매일 코드를 만질 때 확인할 수 있는 기준에 가깝다.

테스트가 통과해야 변경을 믿을 수 있고, 중복이 줄어야 수정 지점이 명확해진다. 이름과 구조가 의도를 드러내면 설명을 덧붙이지 않아도 코드가 읽힌다. 그리고 불필요한 구성 요소를 줄이면 코드베이스 전체가 가벼워진다. 네 가지는 따로 떨어진 규칙이 아니라 서로 연결되어 있다.

캠프장 규칙

클린 코드는 한 번에 완성되는 상태가 아니다. 이미 존재하는 코드 전체를 새로 쓰는 일보다, 내가 건드린 주변을 조금 더 낫게 남기는 일이 현실적이다. 변수 이름 하나를 더 분명하게 바꾸거나, 중복된 조건을 함수로 빼거나, 읽기 어려운 흐름을 나누는 정도여도 충분하다.

중요한 점은 정리를 별도의 이벤트로 미루지 않는 것이다. 기능을 추가하는 동안 작은 청소를 계속하면 코드가 급격히 망가지는 속도를 늦출 수 있다. 반대로 작은 어지러움을 계속 방치하면 어느 순간부터는 아무도 쉽게 손대지 못하는 코드가 된다.

정답보다 태도에 가깝다

클린 코드에는 왕도가 없다. 언어, 팀, 도메인에 따라 좋은 코드의 모양은 조금씩 달라진다. 다만 공통적으로 남는 태도는 있다. 코드를 읽는 사람을 배려하고, 변경을 두려워하지 않도록 만들고, 발견한 문제를 가능한 작은 단위로 고쳐 나가는 것이다.

그래서 이 장은 특정 기법보다 기준을 세우는 장에 가깝다. 코드는 돌아가기만 해서는 부족하다. 오래 살아남아야 하고, 여러 사람이 함께 다룰 수 있어야 한다.

다음장으로 2장