본문 바로가기

클린코드(Clean Code)를 읽고

클린 코드 (Clean Code) - 애자일 소프트웨어 장인 정신

지은이 : 로버트 C. 마틴

옮긴이 : 박재호, 이해영

출판사 : 인사이트(insight)

❓책을 읽게된 이유

이 책을 처음 접한 것은 2022년 우아한테크코스(이하 우테코) 5기에 지원하였을때이다. 당시 우테코에서는 과제를 진행하며 클린한 코드를 작성하는 것을 요구 했다. 당시 나는 클린한 코드에 대해 아는 것이 없었기에 부랴부랴 클린코드를 사서 목차 수준만 간단하게 눈으로 훑고 우테코 5기를 진행하였다. (그러나 학교와 병행하며 하기에는 너무 시간이 없어 결국 우테코 프리코스를 중간에 포기해야 했다.)

그리고 1년이 흘러 우테코 6기에 다시 도전하고 실패하며 “실패는 성공의 어머니라”는 말을 곱씹으며우테코 측에서 제시해준 백엔드 개발자 로드맵에 클린코드가 있어 책장에서 꺼내 다시 읽었다.

💡인상 깊었던 점

우테코 프리코스를 하기 이전 나아가 “클린코드”를 읽기 이전의 나와 지금의 나는 확실히 다르다고 말할수 있다. 이전에는 클린한 코드에 대한 정의를 나 혼자 내리고 누구에게도 나의 코드를 보여줄 일이 없었기에 내가 작성한 코드가 클린한 코드인지 아닌지 알기 어려웠다. 그러나 “클린 코드” 에서 제시해주는 몇가지 포인트 덕분에 코드를 작성할때 몇가지 규칙을 습득할 수 있었다.

의미 있는 이름

클린코드를 읽기 전에는 패키지, 클래스, 메소드, 변수 이름에 큰 신경을 쓰지 않았다. 그러나 이 책에서 조언하듯 이름을 서술하듯 짓고 하나의 개념만을 나타내기 위해 신경쓰며 최대한 명쾌하게 느끼도록 이름을 지으니 코드의 가독성이 증가하는 것을 느꼈다. 역시 백번 말하는 것보다 한번 겪는게 더 효과가 좋은듯 하다.

함수

책을 읽고 과거 현장실습을 하며 진행한 프로젝트에서 내가 작성한 코드를 보았다. 너무 쓰레기 같은 코드였다. 너무나 긴 코드, 다양한 역할을 하는 코드.. 아마도 이 책에서 내가 가장 감명깊게 읽은 부분은 함수 부분인듯하다. 덕분에 긴 코드에 비해 짧은 코드가 가지는 장점에 대해 많은 생각을 할 수 있었고 특히 SRP를 클래스가 아닌 메소드 단위로도 생각할 수 있게 해주었다.

내려가기 규칙

코드는 위에서 아래로 이야기처럼 읽혀야 좋다.

그동안 IDE를 통해서만 개발을 진행하고 과거 내가 작성한 코드는 접근제어자에 따라 메소드의 위치를 나누어 한눈에 알아보기 어려웠다. 이런 나에게 있어 메서드의 위치를 명확하게 규정하는 “내려가기 규칙”은 코드를 정리하는데에 있어 큰 도움을 주었다. 그러나 여전히 특정 메서드가 다양한 위치에서 쓰일때 해당 메서드의 위치에 대한 고민이 있다. 아마도 이는 어느정도 타협을 하지 않아야 할까 싶다.

가로, 세로 공백

책을 읽기 전까지 추상적으로 존재하던 지식인 “가로”, “세로”에 대해 생각을 정형화할 수 있었다. 세로 공백의 의미는 논리적인 분리. 가로 공백은 공백으로 묶여 있는 코드에 대해 하나의 의미.

디미터의 법칙

모듈은 자신이 조작하는 객체의 속사정을 몰라야한다.

즉 객체를 가져와서 직접 조작하기 보단 역할을 해당 객체에 일임해야 한다는 것으로 이해했다. 그렇기에 만약 디미터의 법칙을 준수하고자 노력한다면 조금더 객체스럽게 코드를 작성할수 있고 나아가 캡슐화 역시 준수할수있다.라는 생각을 하였다. 디미터의 법칙을 무시하고 객체를 직접 가져와 이리저리 조작하던 과거의 나를 반성한다.

클래스 with 응집도

과거 클래스를 SRP만 고려하여 클래스를 설계하였다. 그러나 “단일 책임”이라는 키워드만 가지고 설계하기에는 “단일 책임”이 너무 불명확하고 주관적이라는 단점이 있었다. 그리고 이를 해결하기 위해 “응집도”라는 논리적인 개념까지 고려해 클래스를 설계하면 클래스의 역할이 명확해진다는 장점이 있는듯 하다. 그리고 “응집도”를 가지고 잘 설계하였는지 확인할 수 있는 기준은 이전보다 많아진 클래스의 수와 이전보다 적어진 클래스의 크기이라고 생각한다.

창발적 설계

1. 모든 테스트를 실행한다.
2. 중복을 없앤다.
3. 프로그래머 의도를 표현한다.
4. 클래스와 메서드 수를 최소로 줄인다.

위의 4가지를 수행하도록 노력하면 자연스레 클린한 코드가 나온다고 책에서 주장하고 있다. 위에서 인상깊었던 것들을 종합하면 “창발적 설계”에 해당한다고 생각한다.

🏁총평

책을 통해 얻은 새롭게 깨달은 지식과 추상화되어있던 나의 지식을 구체화할 수 있었던것 같다. 또한 클린하지 못한 코드, 클린한 코드를 같이 예시로 보여줘서 반면교사를 많이 삼을수 있었던 책이였다. 그리고 지금의 나로서는 사용할 수 있는 기술의 수를 늘리는 정량적인 공부보다는 코드의 질을 높일수 있는 정성적인 공부가 필요했고 이러한 나에게 있어 크게 도움이 되었던 책이였다고 생각한다. 물론 “단 한 권의 책만 읽은 사람이 무섭다.”라는 말처럼 책에 있는 모든것을 경전처럼 받들면서 코드를 작성하는 것 역시 옳지 않다고 생각한다. 책에서도 초반부에 본인이 생각하는 것들을 작성하였다… 라는 문구가 있으며 중반부에도 아무리 공부를 하여도 경험만큼 중요한것은 없다고 하였다. 그렇기에 앞으로 코드를 작성할때 클린코드를 참고하되 맹신하지 않토록 주의를 기울어야 할 듯한다.