1 of 15

클린코드

2 of 15

1. 깨끗한 코드

3 of 15

코드가 존재하리라

  • 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업, 바로 이것이 프로그래밍이고 코드이다!
  • 프로그래밍 언어에서 추상화 수준은 정차 높아지리라 예상한다.
  • 제대로 명시한 요구사항은 코드만큼 정형적 이며 테스트 케이스로 사용해도 좋다는 사실이다!
  • 코드는 요구사항을 표현하는 언어이며 어느 순간에는 정밀한 표현이 필요하다. 그렇기 때문에 코드는 사라지지 않는다.

4 of 15

나쁜 코드

  • 나쁜 코드는 버그, 어려운 유지 관리, 회사 실패 등의 문제를 일으킨다.
  • 나쁜 코드를 작성하는 것은 "고행(mortification)"이라고 하는 프로그래머에게 자주 발생하는 문제이다.
  • 나쁜 코드를 작성하는 이유는 서두르거나 시간이 부족해서 발생한다.
  • Kent Beck의 책 "Implementation Patterns"는 좋은 코드 작성에 관해 나와있다.
  • 개발자는 나중에 나쁜 코드를 수정하겠다고 약속했지만 "나중“은 오지 않는다.

5 of 15

나쁜 코드로 치르는 대가

  • 매번 얽히고설킨 코드를 '해독'해서 얽히고 설킨 코드를 더한다.
  • 시간이 지나면서 쓰레기 더미는 점점 높아지고 깊어지고 커진다.
  • 결국 생산성이 0에 가까워 진지고 수정할 방법이 없다.

6 of 15

원대한 재설계의 꿈

  • 관리자는 재설계에 자원을 쏟아 붓기 싫지만 생산성이 바닥이라는 사실을 부인할 도리가 없습니다.
  • 결국은 팀이 요구하는 대로 원대한 재설계를 허락한다. 새로운 타이거 팀이 구성됩니다.
  • 모두가 타이거 팀에 합류하고 싶어 합니다.
  • 나머지는 계속해서 현재 시스템을 유지 보수 합니다.
  • 타이거 팀은 기존 시스템 기능을 모두 제공하는 새 시스템을 내놓아야 합니다.
  • 새 시스템이 기존 시스템 기능을 100% 제공하지 않는 한 관리층은 기존 시스템을 대체하지 않습니다.
  • 새 시스템이 기존 시스템을 따라잡을 즈음이면 초창기 타이거 팀원들은 모두 팀을 떠났고 새로운 팀원들이 새 시스템을 설계하자고 나섭니다. 왜? 현재 시스템이 너무 엉망이라서.

7 of 15

태도

  • 좋은 코드가 나쁜 코드로 바뀔 수 있는 이유는 다양합니다.
    • 요구 사항 변경, 빡빡한 일정, 잘못된 관리 결정 등이 있습니다.
  • 프로그래머가 생산하는 코드의 품질에 대한 궁극적인 책임이 있다고 주장합니다.
  • 프로그래머가 관리자 및 프로젝트 이해 관계자에게 정보와 조언을 적극적으로 제공해야 한다고 제안합니다.
  • 비현실적인 요구 사항이나 일정에 반대하더라도 좋은 코드를 유지하는 것은 프로그래머의 책임입니다.
  • 프로그래밍에서 프로페셔널리즘과 윤리적 책임의 중요성을 설명하기 위해 수술 전 손 씻기를 건너뛰는 것을 거부하는 의사의 비유를 사용합니다.

8 of 15

원초적 난제

  • 프로그래머가 기본 가치의 균형을 맞추는 데 어려움을 겪는다.
    • 일정 vs 코드 품질
  • 잘못된 코드가 궁극적으로 진행 속도를 늦춘다는 점에 대해 설명합니다.
  • 프로그래머는 마감일을 맞추기 위해 잘못된 코드를 생성해야 한다고 느낄 수 있지만 실제 전문가는 이 접근 방식이 비생산적이며 깨끗한 코드가 성공을 달성하고 마감일을 맞추는 열쇠라는 것을 알고 있습니다.
  • 프로그래머는 궁극적으로 효율적이고 효과적으로 코드를 최대한 깔끔하게 유지하는 습관을 들이는 것이 중요합니다.

9 of 15

깨끗한 코드라는 예술?

  • 깨끗한 코드를 구현하는 것은 페인팅과 유사합니다. 좋은 코드와 나쁜 코드를 구별할 수 있다고 해서 깨끗한 코드를 작성하는 방법을 안다는 의미는 아닙니다.
  • 깨끗한 코드를 작성하려면 자제력과 규율이 필요하며 "깨끗함"이라는 학습된 감각을 사용하여 미묘한 기술을 적용해야 합니다.
  • 열쇠는 어떤 프로그래머는 자연스럽게 가지고 있는 반면, 다른 프로그래머는 그것을 개발하기 위해 열심히 노력해야 하는 "코드 감각"을 갖는 것입니다.
  • "코드 감각"을 가진 프로그래머는 좋은 코드와 나쁜 코드를 구별할 수 있고 나쁜 코드를 좋은 코드로 바꾸는 전략을 식별할 수 있습니다.
  • 클린 코드 작성자는 좋은 코드로 나쁜 코드를 개선하는 방법을 생각하고 "코드 강도"로 최상의 계획을 선택하여 앞으로 나아갈 경로를 계획합니다.
  • 깨끗한 코드를 작성하는 프로그래머는 빈 캔버스를 우아한 예술 작품으로 바꾸는 화가와 같습니다.

10 of 15

깨끗한 코드란?

  • 프로그래머들은 깨끗한 코드에 대해 각자 다른 정의를 가짐
  • C++ 창시자인 비야네 스트롭스트룹은 우아하고 효율적인 코드를 지향하며, 코드의 의존성을 최소화하고 오류 처리를 철저히하며 성능을 유지하는 것이 중요하다고 언급함
  • 비야네는 깨끗한 코드가 보기에 즐거운 코드여야 한다고 강조하며, CPU 자원을 낭비하는 코드도 우아하지 않다고 지적함
  • 실용주의 프로그래머 데이브 토마스와 엔디 헌트는 깨진 창문 비유를 사용하여, 깨끗한 코드는 세부적인 부분까지 철저하게 관리하는 것이 중요하다고 강조함

11 of 15

우리들 생각

  • 책 『클린 코드』는 클린 코드를 작성하는 방법을 설명하고 저자와 동료들이 믿고 실천하는 교훈과 기법을 담고 있다.
  • 저자는 그들의 의견과 기술이 절대적인 사실이 아니며, 다른 경험자나 전문가들이 배울 점이 있음을 인정합니다.
  • 이 책은 저자가 수십 년 동안 경험과 반복된 시행착오를 통해 터득한 교훈과 기법을 추천한다.
  • 저자는 독자들이 자신의 관점에 동의하지 않더라도 이해와 존중을 요구한다.

12 of 15

우리는 저자다

  • Javadoc은 저자를 소개하기 위해 @author 필드를 사용합니다.
  • 저자는 독자와 잘 소통할 책임이 있습니다.
  • 독자는 코드를 기준으로 저자를 판단합니다.
  • 코드를 읽는 것은 코드를 작성하는 것보다 더 많은 노력이 필요합니다.
  • 새로운 코드를 작성하려면 읽기 쉬운 코드가 중요합니다.
  • 코드를 읽기 쉽게 만들면 새로운 코드를 더 쉽게 작성할 수 있습니다.
  • 주변 코드가 읽기 쉬우면 새로운 코드를 작성하기가 더 쉽습니다.

13 of 15

보이스카우트 규칙

  • 보이 스카우트 규칙은 자신이 머문 자리를 청소한다.
  • 코드를 항상 깨끗하게 유지하는 것은 코드 퇴화를 방지하는 데 중요합니다.
  • 처음 도착했을 때보다 코드를 더 깔끔하게 놔두면 절대 나빠지지 않습니다.
  • 한 번에 코드를 정리하는 데 많은 시간과 노력을 들일 필요가 없습니다.
  • 하나의 변수 이름을 개선하거나 약간 더 긴 함수 하나를 분할하거나 일부 중복을 제거하면 코드를 정리하기에 충분합니다.
  • 시간이 지남에 따라 지속적으로 코드를 개선하는 것이 전문성의 본질입니다.

14 of 15

프리퀄과 원칙

  • 이 책은 Agile Software Development:Principle, Pattenrs, and Practices(PPP)의 프리퀄이다.
  • 이 책 에서는 다양한 설계 원칙을 산발적으로 거론 한다. SRP(Single Responsibility Principle),
  • OCP(Open Closed Principle), DIP(Dependency Inversion Principle)등이 그 예다. 각 원칙은 PPP에서 자세히 설명한다.

프리퀄(Prequel)은 전편보다 시간상으로 앞선 이야기를 보여주는 속편이다. 본편의 이야기가 왜 그렇게 흘러가는지 설명하는 기능을 하며, 전편이 흥행해서 후편을 만들고자 할 때 만들어지기도 한다.

15 of 15

결론

  • 예술이나 프로그래밍에 관한 책을 읽는다고 해서 예술가나 훌륭한 프로그래머가 될 수 있다는 보장은 없습니다.
  • 이러한 책은 도구, 기술 및 사고 방식에 대한 소개일 뿐입니다.
  • 이 책은 위대한 프로그래머가 생각하는 방식과 그들이 사용하는 기술, 트릭 및 도구에 대한 소개서입니다.
  • 자세한 정보, 좋은 코드와 나쁜 코드 예제, 나쁜 코드를 좋은 코드로 바꾸는 방법이 포함되어 있습니다.
  • 책에는 많은 예가 나와 있지만 나머지는 독자의 몫입니다.
  • 음악가가 연주를 잘 하려면 연습이 필요하듯이 훌륭한 프로그래머가 되기 위해서는 연습이 필수적입니다.