[Clean Code] 1장 깨끗한 코드

ASk·2021년 12월 30일
0

Clean Code

목록 보기
1/17
post-thumbnail

코드가 존재하리라

  • 코드의 도움 없이 요구사항을 상세하게 표현하기란 불가능.
  • 코드는 기계가 이해하고 실행할 정도로 엄밀하고 정확하고 상세하고 정형화되어야 함.
  • 코드는 요구사항을 정밀하게 표현하는 언어.

나쁜 코드

  • 좋은코드는 중요하다
  • 어떠한 이유로 나쁜 코드를 짰더라도 수정할 수 있는 나중은 결코 오지 않는다.

나쁜 코드로 치르는 대가

  • 나쁜 코드는 개발속도를 크게 떨어뜨린다.
  • 나쁜 코드가 쌓일수록 팀 생산성은 떨어진다. (얽히고 설킨 코드를 해독 하느라)
  • 인력을 투자 하더라도 기존 설계 의도를 온전히 파악 하지 못하면 나쁜 코드를 더 양산하게 된다.

원대한 재설계의 꿈

  • 관리층은 재설계에 자원을 쏟아붓기 싫지만 나쁜코드로 인해 생산성이 안좋다는것을 부인 할수 없다.
  • 결국 팀의 요구대로 원대한 재설계를 허락한다.
  • 오래 걸려 기존 시스템을 따라잡을 즈음 새로운 팀원이 새로운 설계를 하자고 한다.
  • 이러한 반복의 예를 통해 깨끗한 코드를 만드려는 노력이 얼마나 중요한지 알아야 한다.

태도

  • 나쁜 코드의 잘못은 전적으로 프로그래머에게 존재.
  • 관리자와 마케팅은 그저 요구사항을 내놓으며 우리에게 도움 요청.
  • 좋은 코드를 사수하는 일은 프로그래머들의 책임.
  • 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다.

원초적 난제

  • 나쁜 코드는 업무 속도를 늦춘다.
  • 기한을 맞추려 나쁜코드를 양산한다, 이는 오히려 개발을 더디게 한다.
  • 언제나 코드를 최대한 깨끗하게 유지하는 습관이 중요하다.

깨끗한 코드라는 예술?

  • 깨끗한 코드가 무엇인지 모르면 깨끗한 코드를 만들 수 없다.
  • 깨끗한 코드와 나쁜 코드를 구분할 줄 안다고 깨끗한 코드를 작성 할줄 아는건 아니다.
  • 깨끗한 코드를 작성 하려면 힘겹게 습득한 감각을 활용해 적용하는 절제와 규율이 필요하다.
  • 코드 감각이 있는 프로그래머는 나쁜모듈을 좋은모듈로 개선할 방안을 떠올린다.

깨끗한 코드란?

비야네 스트롭스트룹(Bjarne Stroustrup)

  • 깨끗한 코드는 보는 사람에게 즐거움을 선사해야 한다
  • CPU 자원을 낭비하는 코드는 우아하지 못하다.(효율의 중요성)
  • 나쁜 코드를 고치면서 오히려 더 나쁜 코드를 만든다.
  • 깨끗한 코드는 세세한 사항까지 꼼꼼하게 처리한다.(철저한 오류 처리)
  • 깨끗한 코드는 한 가지에 집중 한다.

그래디 부치(Grady Booch)

  • 깨끗한 코드는 단순하고 직접적이며 잘 쓴 문장처럼 읽힌다.
  • 설계자의 의도를 숨기지 않는다.(가독성)
  • 코드는 추측이 아니라 사실에 기반해야 하며 반드시 필요한 내용만 담아야한다.
  • 코드를 읽는 사람에게 프로그래머가 단호하다는 인상을 줘야한다.

큰 데이브 토마스(Dave Thomas)

  • 깨끗한 코드란 반드시 다른 사람이 고치기 쉽다.
  • 의존성은 최소이며 각 의존성 명확히 정의한다.(작을수록 좋다.)
  • 테스트 케이스가 없다면 아무리 우아하고 가독성이 높아도 깨끗하지 않다.(테스트 코드 매우 중요)

마이클 페더스(Michael Feathers)

  • 깨끗한 코드는 주의 깊게 짰다는 느낌을 준다.
  • 누군가 시간을 들여 깔끔하고 단정하게 정리한 코드.

론 제프리스(Ron Jeffries)

  • 켄트백이 제안한 코드 규칙을 따른다.
    • 모든 테스트를 통과한다.
    • 중복이 없다.
    • 시스템 내 모든 설계 아이디어를 표현한다.
    • 클래스, 메서드, 함수 등을 최대한 줄인다. (작게 추상화)
  • 중복과 표현력(의미있는 이름)만 신경써도 깨끗한 코드라는 목표에 다가선다.
  • 추가로 초반부터 간단한 추상화 고려 까지 포함하는것이 깨끗한 코드를 만드는 비결이다.

워드 커닝햄(Ward Cunningham)

  • 읽으면서 짐작했던 기능을 수행 한다면 깨끗한 코드다.
  • 코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드다.
  • 깨끗한 코드는 읽으면서 놀랄 일이 없어야한다. (의도한 대로, 짐작한 대로 동작하기 때문)
  • 프로그램을 단순하게 보이도록 만드는 열쇠는 언어가 아니다. 프로그래머의 역량이다.

우리들 생각 (저자와 저자의 팀의 생각)

  • 깨끗한 변수 이름, 깨끗한 함수, 깨끗한 클래스
  • 이 책은 오브젝트 멘토 진영이 생각하는 깨끗한 코드를 설명한다.
  • 이 책을 통해 수십 년에 걸친 경험과 반복적 시행착오로 습득한 교훈과 기법을 체득했으면한다.

우리는 저자다

  • 새로운 코드 작성시 대부분 기존 모듈을 파악하는대에 시간을 쓴다.
  • 새 코드를 짜면서 끊임없이 기존코드를 읽는다.
  • 따라서 읽기 쉬운코드는 매우 중요하다.

보이스카우트 규칙

  • 잘 짠 코드가 전부는아니다. 시간이 지나도 언제나 깨끗하게 유지해야 한다.
  • 체크아웃 할때보다 좀 더 깨끗한 코드를 체크인해야 한다.
  • 우리가 본 코드를 그 순간보다 조금만 더 개선한다면 코드는 더러워질 수가 없다.
  • 거창하게 생각할 필요는 없다. 변수의 명명, 너무 긴 코드의 분할, 작은 중복의 제거, 복합 if문 하나의 개선 정도만 해 보라.
  • 지속적 개선이야 말로 전문가 정신의 본질이다.

프리퀄과 원칙

  • 이책은 저자가 작성한 Agile Software Development: principles, Patterns, and Practices (PPP) 의 프리퀄
  • PPP는 SRP, OCP, DIP 등의 설계 원칙을 거론한다.

결론

  • 이책을 읽는다고 뛰어난 프로그래머가 된다는 보장은 없다.
  • 단지 뛰어난 프로그래머가 생각하는 방식과 그들이 사용하는 기술과 기교, 도구를 소개한다.
  • 다양한 경험적 교훈과 체계, 절차, 기법도 열거한다.
  • 얼마만큼 습득하는지는 독자에게 달려있다.
  • 항상 끊임없이 연습해야 한다.
profile
Backend Developer

0개의 댓글