본문 바로가기
Summary/Clean Code

Road to Clean Code - 1편 (깨끗한 코드)

by Hooligans 2021. 4. 20.

개요

 해당 포스팅은 스터디장님의 제안으로 시작되었습니다. 더 나아가 개발자들의 바이블이라는 '클린 코드'를 아직까지 못 읽었다는 부끄러움과 함께 바쁘지만 틈틈이라도 읽어보자라는 마인드로 시작했습니다. 이번 계기로 깨끗한 코드를 만들 수 있는 개발자로 한 걸음 성장할 수 있기를 기대합니다.

 

대부분의 책은 1장이 가장 중요하다고 생각합니다. 1장을 읽으면서 느낀 생각은 이 책도 마찬가지라는 생각이었습니다. 1장에서는 필자, 즉 Robert. C Martin이 강조한 클린 코드를 왜 집필했고, 왜 사용해야 하는지에 대한 개괄이 등장합니다.

 

지금부터 1장을 요약해보면서 저자가 왜 그토록 깨끗한 코드를 강조하는지에 대해 알아보겠습니다.

 

코드의 필요성에 대해 먼저 생각해보자

 최근 특정 사이트를 만들어 주는 플랫폼들이 많이 보이는 것 같습니다. GUI를 통해 배치하면 해당 플랫폼에서 자동으로 코드를 작성하고, 그 방식대로 웹 사이트를 랜더링 해줍니다. 이러한 추세에 따라 코드가 사라지는 것 아닌가라는 생각을 할 수도 있습니다. 하지만, 코드의 역할은 그렇게 단순하지 않습니다. 만약 플랫폼이 제공하지 않는 기능을 추가하고 싶을 때는 어떻게 해야 할까요? 결국에는 직접 코드를 작성해야 할 것입니다. 어느 정도 수준에 이르면 코드의 도움 없이 요구사항을 상세하게 정의하는 것은 어렵습니다.

 

 즉, 코드는 우리가 컴퓨터를 사용하고, 이로써 만들어지는 콘텐츠를 소비하는 한 필요한 존재입니다. 이렇게 필요한 존재로써 코드를 어떻게 하면 좋은 모습으로 작성할 수 있을까요?

 

 지금부터 차례차례 알아보겠습니다.

 

나쁜 코드가 가져오는 영향에 대해 알아볼까요?

 나쁜 코드에 대한 디테일한 내용은 점차 책을 읽어가면서 알아보겠습니다. 나쁜 코드를 쓰면 왜 안 되는지에 대해서 먼저 알아보겠습니다.

 

 우선 개발 속도를 크게 떨어뜨린다는 것입니다. 정해진 컨벤션이나 원칙을 고려하지 않은 채 코드를 작성하면 빠르게 작성할 수 있는 거 아니야? 생각하실 수 있습니다. 하지만 그 순간은 개발 초반에만 허용됩니다. 코드가 길어지고 프로젝트가 복잡해질수록 좋은 설계에 기반한 코드가 아니면 가독성 유지보수성이 현저하게 떨어집니다.

 

 예를 들어 높은 응집도와 낮은 결합도를 지닌 모듈의 경우, 하나의 기능이나 모듈을 수정해야 하는 상황이 오면 해당 모듈만 수정해주면 이를 쉽게 대체할 수 있습니다. 하지만, 결합도가 높고 응집도가 낮은 코드들은 어느 곳에서 변경을 해야 하는지 찾는데 시간이 더 오래 걸리게 됩니다. 시간이 지나면 이러한 코드들은 더 복잡해지고, 이에 따라 더 많은 시간이 소요되게 됩니다. 이에 따라 심각해지면 유지보수의 한계가 발생하고 시스템 전체를 재설계해야 하는 상황이 발생할 수 있습니다. 궁극적으로 깨끗한 코드를 의식하고 작성하지 않는다면 이 문제는 되풀이됩니다.

 

나쁜 코드는 왜 발생할까요?

 저자는 개발자의 태도에서 이를 찾습니다. 우리는 종종 눈 앞에 놓인 과제를 기한 내에 처리하기 위해서 나쁜 코드를 양산합니다. 그러면서 우선 빠르게 개발하고, 천천히 리팩터링 하면 되겠지?라는 안일한 태도를 가지곤 할 것입니다. 하지만 야속하게도 나중은 결코 오지 않는다.라는 르블랑의 법칙같이 우리는 또 다른 과제로 인해 혹은 잊어버리는 등 다양한 이유로 해당 코드를 방치하게 되곤 합니다.

 

 여기서 그건 마감기한을 잘못 선정한 관리자의 책임 아니야?라는 태도를 보일 수도 있다고 생각합니다. 하지만, 이는 개발자도 책임을 피할 수 없습니다. 개발자는 비즈니스를 정의할 때, 혹은 요구사항을 정의할 때, 사용자 및 관리자와 충분한 소통을 통해 현실성을 제공하고, 이를 결정하고 끊임없이 피드백할 수 있는 전문성이 필요합니다. 즉, 마감기한이 잘못되었다는 것은 결정적으로 소통이 부족했다는 뜻이고, 이는 전문성의 부족으로 직결됩니다.

 

 이와 같이 안일한 태도와 전문성의 부족은 개발자를 나쁜 코드로 이끌 수 있습니다.

 

 그렇다면 깨끗한 코드는 어떻게 작성해야 할까요?

 

 지금부터 알아보겠습니다.

 

깨끗한 코드는 무엇일까요?

 여기에 대하여 많은 권위자들이 정의했습니다. 모든 정의를 설명드리는 것은 포스팅이 지나치게 길어질 것으로 생각되니 최대한 요약해보겠습니다. 우선 가장 많이 강조된 것은 가독성입니다. 보기 즐거운 코드, 좋은 소설과 같이 잘 읽히는 코드, 코드 독해가 필요 없는 코드 등으로 정의했지만 그 의미는 가독성이라고 생각했습니다.

 

 다음은 코드에 대한 주의입니다. 깨끗한 코드는 가독성을 넘어서 꼼꼼하고 세밀하게 작성되어야 합니다. 이에 따라 고치려고 해도 딱히 손댈 수 없는 코드, 고칠 생각을 하면 다시 원래대로 돌아오는 정도로 주의 깊게 짜는 것이 깨끗한 코드를 작성하는 것임을 강조합니다. 더 나아가 이를 증명하기 위한 단위 테스트와 통합 테스트의 작성도 필요합니다.

 

 이외에도 중복을 피하고, 기능을 작게 추상화하며 단일 책임의 원칙을 강조하는 등 깨끗한 코드는 이처럼 많은 것을 신경 써야 합니다.

 

깨끗한 코드를 작성하기 전에 필요한 요소들은 무엇일까요?

 위와 같은 깨끗한 코드를 한 번 써본다고 해서 끝나는 것이 아닙니다. 우리는 보이스카우트 규칙에 따라 나쁜 코드를 보면 개선하고, 좋은 코드를 보아도 더 개선하여 작업 이후에는 더 좋은 코드들이 남아있을 수 있도록 지속적인 개선에 대한 습관을 들여야 합니다. 저자는 이 책을 읽은 이후에 프리퀄과 원칙을 읽어보라고 추천합니다. 다양한 객체지향 설계 원칙이 존재하여 코드의 퀄리티를 높일 수 있는 것으로 알고 있습니다. 마지막으로 1장에서 저자가 강조하는 것은 뒤에 읽을 깨끗한 코드를 어떻게 작성하는지에 대한 방법론을 이해하는 것뿐만 아니라 언제 어디서든 사용할 수 있도록 이를 연습하고 또 연습해야 한다는 점입니다.

 

결론

  • 코드는 우리가 컴퓨터를 사용하고, 이로써 만들어지는 콘텐츠를 소비하는 한 필요한 존재입니다.
  • 나쁜 코드는 가독성과 유지보수성을 저해하므로 개발 생산성을 떨어뜨립니다.
  • 개발자의 안일한 태도와 전문성 부족으로 인해 나쁜 코드가 생산됩니다.
  • 깨끗한 코드란 가독성이 좋고, 꼼꼼하고 세심하게 작성되어 재수정의 필요성이 낮은 코드를 의미합니다. 이외에도 중복이 없고, 작은 단위로 추상화되고 기능, 메소드, 모듈 등이 하나의 책임을 갖는 코드를 의미합니다.
  • 개발자는 깨끗한 코드를 작성하기 전에 지속적으로 코드를 개선하는 습관과 좋은 코드를 작성하기 위한 능력을 지녀야 하며 최종적으로 이를 언제든 사용할 수 있도록 연습해야만 합니다.

GitHub Repository

 

RCM-Study/CleanCode

CleanCode by Robert C. Martin 요약 저장소. Contribute to RCM-Study/CleanCode development by creating an account on GitHub.

github.com

 

참고

  • 클린코드 Clean Code, 로버트.C.마틴 지음, 이해영, 박재호 옮김, 인사이트 출판사