노마드코더 스터디를 통해 ‘클린 코드’를 약 30% 정도 읽었습니다. 생각보다 방대한 양의 책이라 3주 동안 읽으면서도 꽤 많은 시간을 독서에 사용했는데 아직도 책의 세 부분 중 한 부분을 읽은 정도라는 점에서 충격이었습니다. 아마 스터디가 없었다면 책 초반부에서 읽는 것을 포기했을지도 모르겠네요.
스터디를 통해 읽은 클린 코드의 내용은 저자가 말하는 책의 세 부분인 깨끗한 코드를 작성하는 원칙, 코드를 바꾸는 연습, 결말과 사례 연구를 만들면서 수집한 휴라스틱 중 첫 번째에 해당하는 부분입니다. 코드를 깨끗하게 관리해야 하는 이유는 책을 읽으면서 무수히 설명하는 이야기이므로 생략하고 제가 읽으면서 느낀 저자가 공통적으로 열거하는 핵심을 요약하고자 합니다.
네이밍이 핵심이다.
개발자가 힘들어하는 일중 하나는 네이밍입니다. 그만큼 네이밍은 중요합니다. 변수나 함수 클래스의 역할을 독자는 네이밍으로 판단하기 때문이죠. 클래스 이름이 모호하면 해당 클래스는 여러 가지 일을 할 확률이 늘어나게 되고, 함수의 이름이 모호하면 함수의 역할을 잘 이해 못 하게 되어 사용자는 결국 함수 내부를 들여다보게 될 것입니다.
네이밍을 할 때는 관용적이고 발음하기 쉽고 검색하기 쉬운 독자 친화적인 이름을 사용해야 합니다. 식당의 주인은 자신이 선호하는 음식이 아닌 손님이 선호하는 음식을 내어야 하듯 코드의 이름도 작성자가 편한 이름이 아닌 사용자가 편한 이름이어야 합니다.
코드의 단위는 작게
코드는 항상 작게 유지해야 합니다. 코드도 결국은 글이기 때문에 문장의 길이가 길어질수록 독자는 글을 읽을 때 피로감을 느낄 수 밖에 없습니다. ‘함수나 클래스가 길다’라는 말은 다시 말하면 ‘함수나 클래스가 여러 가지 일을 하고 있다’라는 말이 됩니다. 이는 SRP를 위반하고 거대해진 코드는 리팩토링에 부담을 주기 때문에 코드의 단위를 작게 유지하는 것은 꼭 지켜져야 하는 규칙입니다.
‘코드의 단위를 작게 유지한다’에서 작음은 어느 정도를 말하는 걸까요? 저자는 추상화 수준이 한 개인 코드를 작성하라고 이야기합니다. 함수의 경우 함수 내부에 추상화 수준을 한 개로 정의하기 힘든 함수는 곧 분리해야 하는 함수라고 판단할 수 있습니다. 함수의 역할은 큰 개념을 추상화 수준에서 여러 단계로 나눠 수행하기 위해서이기 때문입니다.
테스트
책을 읽다 보면 클린 코드를 위해 반복적으로 언급되는 단어가 있습니다. 바로 테스트입니다. 테스트는 개발자가 코드를 리팩터링 하는 부담을 줄여주고 개발자가 미처 생각하지 못한 부분을 파악하거나 커버리지를 확인할 수 있는 중요한 도구입니다. 테스트를 통해 개발자는 사용자의 시나리오를 직접 재현하며 코드의 누수를 검증할 수 있고 개발자나, 비 개발자에게 설명하기 위한 문서로 활용할 수 있으며, 바뀌는 코드에 안정적으로 대응할 수 있습니다.
테스트 또한 코드의 일부분이기 때문에 개발자는 깨끗한 테스트 코드를 유지해야 합니다. 이를 위해 테스트는 유연성, 유지 보수성, 재사용성을 제공해야 합니다. 테스트는 테스트 데이터를 만들고 테스트 데이터를 조작하며 결과를 검증하는 세 부분으로 나누어 관리해야 하고 테스트는 실제 테스트가 필요로 하는 자료 유형과 함수만을 사용해야 합니다.
.
사실 ‘클린 코드’에서 언급하는 규칙들은 깨끗한 코드에 목마른 개발자라면 당연하다고 느낄 수 있습니다. 또한 동의하지 못하는 내용도 있을 수 있습니다. 저자가 서론에서 언급하는 것 처럼 ‘클린 코드’는 꾸준히 읽는 참고서와 같습니다. 자신이 속한 그룹이나 팀과 함께 깨끗한 코드에 대해 논의하고 적용하는 과정이 ‘클린 코드’라는 책이 가지는 의미라고 생각합니다.
스터디와 함께 책을 읽으면서 매일 정리하고 기록하는 글쓰기를 연습할 수 있어서 좋았습니다. 여기서 멈추지 않고 남은 2장 3장도 천천히 읽을 계획입니다. 저자의 충고를 통해 나중에 취업을 하게 된다면 사내 스터디로 ‘클린 코드’를 읽으며 토의하는 것도 좋을 거 같습니다.