0. Introduction

  • 로버트 C. 마틴이 지은 클린 코드(Clean code) 를 읽고 진행한 북 스터디입니다.
  • 각 chapter를 읽고 내용 정리하는 식으로 진행했습니다.
  • 이번 book study를 진행하면서 code에 대한 철학이 생기고, code를 바라보는 눈이 깊어지고, 넓어지기를 바라며 시작합니다.

어떤 자세로 읽어야 하는가?

  • 장인 정신을 익히는 과정은 두 단계(: 이론 과 실전)로 나뉜다고 한다.
    • 이론: 장인에게 필요한 원칙, 패턴, 기법, 경험이라는 지식을 습득하는 단계
    • 실전: 열심히 일하고 연습하여 이론을 체화시키는 단계
  • 예로 들자면 ‘자전거 타기’를 들 수 있다. 이 자전거 타는 것에 대해 수학적으로 미적분을 활용하여 물리적인 원리를 설명하고 이해할 수 있으나, 이를 가지고 자전거를 탈 수 있는 건 아니다.
  • 코드도 그렇다. 이론만 안다고 깨끗한 코드를 작성할 수 없고, 직접 부딪히고 고생해보고 깍아내는 노력을 통해서 나오는 결과물이 ‘Clean code’ 다.
  • 그래서 이 책은 마음 편히 읽을 책이 아닌, 손과 마음으로 고생할 준비로 읽어야 하는 책 이다.

책의 큰 구성 설명

  • 책 구성 순서: 클린 코드(clean code)를 작성하는 원칙,패턴 → 여러 사례 연구를 보면서 타당한 이유를 통해 문제가 적은 코드로 바꿔보기 → 결론
  • 그러면 첫 번째 순서부터 진행해보자.

1장 깨끗한 코드

1.1 코드가 존재하리라

코드는 요구사항을 컴퓨터가 이해할 수 있도록 정확히 명시하는데 반드시 사용해야 하는 언어로서, 도구이자 결과다.

언젠가 코드가 사라질 거라 믿는 사람들이 존재하는데, 이는 요구사항을 모호하게 줘도 우리의 의도를 정확히 궤뚫어 프로그램을 완벽하게 실행하는 기계가 생길거라 믿는 것과 동일하다.

요구사항을 어느 순간이든 정밀하게 표현하는 게 필요하기 때문에, 코드는 항상 존재할 수 밖에 없다.

1.2 나쁜 코드

나쁜 코드는 회사가 망할 수 있을 정도의 원인이 된다.

그러면 어째서 나쁜 코드를 짠 것일까? 모두가 경험한 흔한 이유들 때문이다.

우린 자신이 짠 쓰레기 코드를 나중에 손보겠다고 생각하지만, 결코 나중은 오지 않는다.

1.3 나쁜 코드로 치르는 대가

나쁜 코드 누적 → 생산성 저하

나쁜 코드를 개선하기 위해서 인력을 추가한다고 해도, 시스템 설계에 대한 조예가 깊지 않으면 결국 더 많이 양산한다.

1.3.1 원대한 재설계의 꿈

결국 재설계를 요구하여, 기존 기능들을 다 할 수 있을 정도의 새 시스템을 짤려고 시도한다. 이 시도는 예상 밖으로 매우 오래 진행되기도 한다. 10년이 넘게 걸리기도 하다.

시스템 재설계가 끝날 때쯤 초창기 팀원들은 떠나가고, 다시 새 시스템을 설계하자는 의견이 나온다.

깨끗한 코드를 만드는 노력이 비용 절감 뿐만 아니라, 전문가로서 살아남는 길이다.

1.3.2 태도

우리는 여러 이유로 나쁜 코드를 작성하게 된다. 그리고, 그 이유로 합리화를 한다.

하지만, 우리는 전문가이기 때문에 우리의 탓으로 인정하고 받아들여야 한다.

대다수의 관리자는 진실을 원하고, 좋은 코드를 원한다. 일정과 요구사항을 그들이 밀어붙이는 이유는 그것이 그들의 책임이기 때문이다.

우리가 의사고, 코드를 짜는 게 환자를 구하는 수술이라고 생각한다면 과연 우리는 함부로 그렇게 할 수 있을까?

1.3.3 원초적 난제

나쁜 코드를 작성하는 시점에서는 시간을 줄이는 방법이라 생각하지만, 보다 거시적인 관점에서 보면 시간을 날리고, 기한을 맞추기 어렵게 만드는 방법이다.

하지만, 좋은 코드를 작성하는 시점에서는 시간을 낭비하는 방법이라 생각하지만, 보다 거시적인 관점에서 보면 시간을 아끼고, 빨리 가서 기한을 맞출 수 있는 방법이다.

1.3.4 깨끗한 코드라는 예술?

깨끗한 코드를 작성하기 위해서는 ‘코드 감각’이 타고나야 한다. 이는 투쟁해서 얻어야 하기도 한다. 이 감각이 있으면 좋은 코드와 나쁜 코드를 구분하는 것을 넘어서 나쁜 코드를 좋은 코드로 바꾸는 전략도 파악한다.

1.3.5 깨끗한 코드란?

  • 세세한 사항까지 꼼꼼하게 처리하는 코드 ex) 메모리 누수, 경쟁 상태, 일관성 없는 명명법
  • 가독성 있는 코드 : 읽는 동안 자연스럽게 흐름이 떠올리는 것 ⇒ 명쾌함(단호함)
  • 테스트 케이스가 있는 코드 → 다른 사람이 고치기 쉬운 코드
  • 중복 줄이기 + 간단한 추상화 고려하기 + 아이디어 명확히 표현하기
  • 독해하면서 머리를 쥐어짤 일이 없는 코드

1.4 우리들 생각

  • 이 책에서 가르치는 기법을 따른다면 깨끗하고 수준 높은 코드를 작성하리라 장담한다.
  • 하지만, 절대적으로 옳다는 생각은 금물
  • 수십 년에 걸친 경험과 반복적인 시행착오로 습득한 교훈과 기법이므로, 이해하기

1.5 우리는 저자다

코드를 읽는 시간이 코드를 짜는 시간의 10배를 훌쩍 넘는다.

그렇기 때문에 읽기 쉬운 코드가 매우 중요하다.

급해서 서둘러 끝내려면, 그리고, 쉽게 짜려면, 읽기 쉽게 만들자.

1.6 보이스카우트 규칙

나갈 때는 들어올 때보다 더 깨끗하게 하고 떠나라.

  • 변수 이름 하나 개선
  • 조금 긴 함수 하나 분할
  • 약간의 중복 제거
  • 복잡한 If 문 하나로 정리

1.8 결론

좋은 코드와 나쁜 코드의 구체적인 사례를 보면서 개선 방법도 소개하고, 예제도 많으므로 연습하자.


Reference