독서

Clean Code 제 1장. 깨끗한 코드

autocat 2022. 2. 19. 21:51

오늘 읽은 범위 : 추천사 ~ 1장. 깨끗한 코드


책에서 기억하고 싶은 내용

추천서 / 들어가면서

  • 사소한 곳에서 발휘하는 정직은 사소하지 않다.
    사소한 것은 중요하다. 세세함에 주의 를 기울이는 태도는 그 어떠한 비전보다 전문가에게 더더욱 필수적이 자질이 되었다. 전문가는 작은 실무부터 실력을 쌓고 신뢰를 얻어야 한다. 아주 사소한 것들이 전체의 매력을 깎아먹기 때문이다. 깨끗한 코드가 중요한 이유도 바로 이 이유이다. 내가 작성한 코드에 대해 정직하자!
  • 5S 법칙
    1. 정리(정렬) ⇒ 코드에서 적절한 명명법을 사용하자
    2. 정돈(체계화) ⇒ 코드는 누구나 예상하는 위치에 있어야한다.
    3. 청소(광내기) ⇒ 과거 이력이나 미래의 바람을 기억한 주석 문과 같은 불필요한 건 제거하자
    4. 청결(표준화) ⇒ 일관적인 구현 스타일과 기법의 필요성. 표준
    5. 생활화(규율) ⇒ 코드를 자주 돌아보며 기꺼이 변경하는 습관을 생활화시키자
    6. 5S법칙은 과거 품질 관리론에서 생산이 아닌 유지보수에 초점을 맞춰 주장되어온 개념이다. 현재 Lean 개발 방법론의 토대가 되었다.
  • 품질은 하늘에서 뚝 떨어진 위대한 방법론이 아니라 사심 없이 기울이는 무수한 관심에서 얻어진다.
    매우 직관적인 말이다. 소프트웨어 설계에서 재작업은 가치를 가져온다.
  • 장인정신을 익히는 과정은 두 단계로 나뉜다.
    • 필요한 원칙, 패턴, 기법, 경험이라는 지식을 습득
    • 열심히 일하고 열심히 연습하여 지식을 몸과 마음으로 체득
      저자는 책을 읽으면서 손으로, 몸으로, 마음으로 읽으면서 익혀가는 과정 및 행동을 강조하고 있다. 자전거 타는 법에 능숙해지면 자전거가 몸의 일부처럼 움직이듯이, 이 책을 철저히 익혀 자신의 일부처럼 활용하길 바란다.

 

제1장. 깨끗한 코드

  • 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업이 바로 Programming이다.
    궁극적으로 코드는 비정형적이고 모호한 요구사항을 표현하는 언어라는 사실을 명심한다. 기계는 이를 대체하지 못한다. 요구사항이 존재하는 한.. 코드는 어디에서든 항상 존재할 것이다. (밥줄 걱정하지 말자고)
  • 나중은 절대 오지 않는다. (르블랑의 법칙)
    일정에 맞추면서 나쁜 코드가 하나둘씩 들어가게 되고 시간이 지나면서 쓰레기 더미는 점점 높아지고 깊어진다. 더 많은 공수가 들어가고 생산성은 떨어지게 된다.
    시간을 들여 깨끗한 코드를 만드는 노력이 비용을 절감하는 방법일 뿐만 아니라 전문가로서 살아남는 길이다.
  • 좋은 코드를 사수하는 일이 바로 우리 프로그래머들의 책임이다.
    일정을 계속해서 강조하고 쪼는 이유는.. 그런 행동 또한 그들에게 책임이기 때문이다. 개발자도 자신의 책임을 다하기 위해 언제나 코드를 최대한 깨끗하게 유지하는 습관을 지녀야 한다.
  • 보이스카우트 규칙
캠프장은 처음 왔을 때보다 더 깨끗하게 해 놓고 떠나라.

한꺼번에 많은 시간과 노력을 투자해 코드를 정리하라는 게 아니다. 지속적으로 개선해나가면서 시간이 지날수록 좋은 코드를 갖춘 프로젝트가 되도록 노력하자는 말이다.

 

클린 코드란?

  1. 우아하고 효율적인 코드
    • 나쁜 코드는 나쁜 코드를 유혹한다.(깨진창문 이론)
      나쁜코드는 존재만으로도 계속해서 다른 나쁜코드를 양산해낸다.
    • 철저한 오류 처리
      세세한 사항까지 철저하게 처리하는 코드를 작성하자.
    • 한 가지를 잘하는 코드
      함수와 클래스와 모듈은 하나의 로직만 수행하게 하자.
  2. 가독성이 좋은 코드
    • 깨끗한 코드는 잘 쓴 문장처럼 읽혀야 한다.
    • 코드는 추측이 아닌 사실에 기반해야 하며 필요한 내용만 담아야 한다.
      새 코드를 짜면서 작성하는 시간보다 코드를 읽는 시간이 더 많기 때문이다!
  3. 다른 사람이 고치기 쉬운 코드
    • 테스트 케이스 없이 깨끗한 코드는 없다.
      아무리 코드가 우아하고 가독성이 높아도 테스트 케이스가 없으면 깨끗하지 않다.
    • 문학적인 코드
      읽기 좋은 코드를 작성함으로써 그 코드를 고치기 쉽게 만들자.
  4. 주의 깊게 작성한 코드
    • 시간을 들여 깔끔하고 단정하게 정리한 코드가 곧 클린 코드다.
  5. 중복이 없는 코드
    • 여러 기능을 수해하는 메서드를 찾아 메서드 추출 기법을 적용해 기능을 분리하자
  6. 집합이 추상화된 코드
    • 작게 추상화된 코드.. 캡슐화를 하여 확장에 용이하게 하자

오늘 읽은 소감은?

  • 개발자에게는 HOW가 중요하다고 실장님들에게 종종 듣는다. 어떻게에 대한 고민 없이 깨끗한 코드는 만들어지지 않는 것 같다.
  • 이전 프로젝트를 진행할 때, 배포를 할 때면 항상 맘 졸이면서 지켜보았다.내 코드에 대한 자신감이 없어서 그랬던 것 같다. 코드에 대한 자신감은 코드를 정직하게 짰느냐에서 나온다. 정직한 코드를 대변해주는 건 테스트 케이스라는 사실은 언제나 변하지 않는 사실인 것 같다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용

  • Lean 개발 방법론
    낭비의 제거를 통해 지속적인 개선 및 수행 속도를 높이고 효과적으로 품질을 개선하는 특징을 가진 개발 방법론이다.
    애자일과 같이 요구사항 변화에 적극적으로 수용하는 것과 빠른 인도로 고객의 가치와 만족도를 높이는 공통점은 있으나, 고객과의 협업을 관점으로 둔 애자일과 달리 린은 현재 프로세스에서 낭비를 제거하는 관점으로 전적으로 고객관점적인 면이 있다.