본문 바로가기
개발 팁/클린 코드

클린 코드 정리 - 1. 깨끗한 코드

by 시리언 2022. 9. 20.

기존에 저장용으로 보관해 놓았던 클린 코드 요약본을 여러분들과 공유해 보고자 합니다. 중간중간 오타나 잘못된 내용이 있다면, 댓글로 피드백 주시면 감사하겠습니다.

 

그리고 저는 제 개인 공부를 위해, 책의 일부 코드를 typescript로 다시 작성해 가며 정리하였습니다. 이 점 참고 부탁드립니다.

 

1장에서는 깨끗한 코드의 필요성과, 깨끗한 코드를 위해 개발자가 가져야 하는 태도에 대해 알아봅시다.

 

좋은 코드의 필요성

코드는 요구사항의 상세한 표현이다.

기계가 실행할 정도로 요구사항을 상세하게 명시하는 작업이 프로그래밍이고, 그 결과가 코드이다. 언젠가는 대략적인 요구사항을 통해 원하는 코드가 만들어질 것이라 생각하는 것은 편협한 사고이다.

나쁜 코드가 가져오는 문제들

개발 속도(생산성)의 저하: 변경 사항이 생길 때마다 코드들을 '해독'해야 한다. 생산성 저하로 인해 추가로 투입되는 인력들은 생산성을 높여야 한다는 압박을 더 받고, 더 나쁜 코드를 더 많이 양산하게 된다. 이런 악순환이 반복되어 결국 팀 전체의 생산성이 0으로 수렴하게 된다. 최악으로는 새 팀을 구성하여 코드만 개선되고 동일한 기능을 하는 시스템을 하나 더 만들게 된다.

읽기 쉬운 코드의 장점

우리가 코드를 읽는 시간 대비 코드를 짜는 시간의 비율이 10대 1을 훌쩍 넘는다고 한다. 실제로 새 코드를 짜면서 우리는 끊임없이 기존 코드를 읽는다. 비율이 이렇게 높기 때문에 읽기 쉬운 코드가 매우 중요하다.

왜 나쁜 코드가 생산되는가?

  • 태도의 문제: 우리 모두는 자신이 짠 안 좋은 코드를 나중에 고치겠다고 생각한 적이 있다. 르블랑의 법칙: 나중은 결코 오지 않는다. 코드가 나쁜 코드로 전락하게 되면 개발자들은 온갖 이유를 들이댄다. 좋은 코드를 사수하는 것은 전적으로 개발자의 책임이며, 관리자나 마케팅 팀, 일정 등의 외부 요인을 탓하는 것은 전문가답지 못하다.
  • 마감 기한의 부담: 기한을 맞추기 위해서는 나쁘더라도 동작하는 코드를 만들어야 한다고 생각한다. 하지만 프로젝트가 진행될수록 나쁜 코드는 생산성 저하로 이어진다. 빨리 가는 유일한 방법은 코드를 최대한 깨끗하게 유지하는 습관이다.
  • 깨끗한 코드에 대한 지식 부족: 깨끗한 코드의 중요성을 인지하였더라도, '무엇이 깨끗한 코드인가?'에 대한 답을 내릴 수 없다면 깨끗한 코드를 위해 노력하여도 소용이 없다. 깨끗한 코드를 작성하기 위해서는 무엇이 깨끗한 코드인지를 알고(코드 감각 - 일종의 예술 감각과 비슷함), 나쁜 코드를 개선할 방안(경로)을 생각해야 한다. 깨끗한 코드를 작성하는 개발자는 빈 캠퍼스를 우아한 작품으로 채우는 화가와 같다.

 

좋은 코드를 위해

그렇다면 좋은 코드는 무엇인가?

프로그래밍 분야에서 유명한 프로그래머들의 의견을 종합하면 다음과 같다.

  • 논리가 단순하고 명확하다. (명쾌한 추상화와 단순한 제어문이 대다수)
  • 의존성을 줄여 유지보수가 편리하다.
  • 오류를 명백한 전략에 의거해 철저히 처리한다.
  • 성능을 최적으로 유지해 사람들이 원칙 없는 최적화를 하지 않도록 한다.
  • 한 가지 기능을 제대로 수행한다. (한 가지에 집중)
  • 적절한 단위 테스트, 인수 테스트 케이스가 존재하고, 모든 테스트를 통과한다.(TDD)
  • 의미 있는 이름들로 구성된다.
  • 중복이 없고, 클래스, 메서드 및 함수를 최대한 줄인다.

저자가 직접 언급한 가장 적절한 좋은 코드에 대한 요약은, '중복을 피하라. 한 기능만 수행하라. 제대로 표현하라. 작게 추상화하라'이다.

좋은 코드를 위한 태도

미국 보이스카우트에는 그들만의 간단한 규칙이 있는데, 바로 캠프장을 처음 왔을 때보다 더 깨끗하게 해 놓고 떠나라는 것이다. 한꺼번에 많은 시간과 노력을 투자해 코드를 정리하는 대신, 변수 이름 하나를 개선하고, 조금 긴 함수 하나를 분할하고, 중복을 제거하고, 복잡한 if 문 하나를 정리하는 것을 습관화하자.

 

댓글