Hyewon의 개발노트

클린코드(책 리뷰)

KakaoTalk_Photo_2022-02-19-01-09-21

클린코드 - 애자일 소프트웨어 장인 정신 (로버트 C.마틴) 읽으며 내용을 요약해 정리한다.
코드 블럭 : 책 내용
인용 문구 : 책 내 인용구
일반 텍스트 : 책을 읽으며 떠오른 생각 및 느낌


목표

  • 노마드 코더의 노개북(노마드 개발자 북클럽) 2기 챌린지 완주
  • 책을 완독하고 클린 코드를 작성하는 개발자로 거듭나기


목차

추천사 및 들어가며
1장 : 깨끗한 코드
2장 : 의미 있는 이름


추천사 및 들어가며

• "소프트웨어 개발에서 아키텍처가 중요하다"
• "책임 있는 전문가라면 프로젝트를 시작할 때 생각하고 계획할 시간을 확보해야한다."
• 원칙, 패턴, 기법, 경험을 토대로 한 장인정신이 필요하다.
• 이 책은 "기분 좋은" 책이 아니고 열심히, 아주 열심해 독파해야 하는 책이다.

개발자들과 협업을 하며 가장 많이 배운것은 왜 이렇게 작성했는지, 변수명을 이해하기 쉽게 짓는 방법이었다. 이 과정에서 시간을 들여 소프트웨어 아키텍쳐와 코드 구현방법을 생각하는것의 중요성을 많이 깨달았다. 마직막 인용 문구를 따라 아주 열심히 책을 독파해보겠다!


1장

깨끗한 코드

• 우리는 프로젝트를 계획하는 과정에 깊숙히 관여한다. 그러므로 프로젝트 실패는 우리에게도 커다란 책임이 있다.
• 시간을 들여 깨끗한 코드를 만드는 노력이 비용을 절감하는 방법일 뿐만 아니라 전문가로서 살아남는 길이라는 사실을 인정하라.

논리가 간단내야 버그가 숨어들지 못한다. 의존성을 최대한 줄여야 유지보수가 쉬워진다. 깨끗한 코드는 한가지를 제대로 한다. - 비야네 스트롭스트룹

깨끗한 코드는 잘 쓴 문장처럼 읽힌다. - 그래디 부치

깨끗한 코드는 작성자가 아닌 사람도 읽기 쉽고 고치기 좋다. - 데이브 토마스

중복을 피하라. 한 기능만 수행하라. 제대로 표현하라. 작게 추상화하라 - 론 제프리스

읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다. 코드가 그 문제를 풀기위한 언어처럼 보인다면 아름다운 코드라 불러도 되겠다. - 워닝 커닝햄

  • 명백하고 단순해 마음이 끌리는 코드가 깨끗한 코드이고, 언어를 단순하게 보이도록 만드는 열쇠는 프로그래머다.
• 우리는 코드의 저자라는 사실을 기억하라. 저자에게는 독자와 잘 소통할 책임도 있다.
• 보이스카우트의 규칙 "캠프장을 처음 왔을때보다 더 깨끗하게 해놓고 떠나라"를 기억하라.
• 이 책은 단지 뛰어난 프로그래머가 생각하는 방식과 그들이 사용하는 기술과 기교와 도구를 소개한다. 나머지에는 여러분에게 달렸다.
• "연습해, 연습!"

추천사에 이어서 코드를 가독성 있게, 유지 보수가 간편하게, 간단하게 작성해야 하는 이유와 그 중요성에 대해 말해주고 있다. 책을 읽으며 연습에 연습을 거쳐 이 책을 완독하기 전과 후의 코드 퀄리티의 갭이 크길 바란다.


2장

의미 있는 이름

• 의도를 분명히 밝혀라
  • 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.
• 그릇된 정보를 피하라
  • 유사한 개념은 유사한 표기법을 사용한다. 일관성이 떨어지는 표기법은 그릇된 정보다.
• 의미있게 구분하라
  • 이름이 달라야 한다면 의미도 달라야 한다.
  • moneyAmount와 money, customerInfo와 customer, accountData와 account, theMessage와 message는 구분이 안된다.
• 발음하기 쉬운 이름을 사용한다.
• 검색하기 쉬운 이름을 사용하라.
  • 이런 관점에서 긴 이름이 짧은 이름보다 좋다. 검색하기 쉬운 이름이 상수보다 좋다.
• 인코딩을 피하라
  • 유형이나 범위 정보까지 인코딩에 넣으면 그만큼 이름을 해독하기 어려워진다.
  • 인터페이스 클래스와 구현 클래스에서 인터페이스 이름은 접두어를 붙이지 않고 구현 클래스에 인코딩을 하는것을 권장한다.
• 자신의 기억력을 자랑하지 마라
  • 독자가 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야 한다면 그 변수 이름은 바람직하지 못하다.
• 메서드 이름은 동사나 동사구가 적합하다.
  • 접근자, 변경자 조건자는 javabean 표준에 따라 값 앞에 get, set, is를 붙인다.
  • 생성자를 중복 정의할 때는 팩토리 메서드를 사용한다.
    • 밑의 두 코드중 위의 코드가 아래코드보다 좋다.
    • Complex fulcrumPoint = Complex.FromRealNumber(23.0);
    • Complex fulcrumPoint = new Complex(23.0);
• 기발한 이름은 피하고 의도를 분명하고 솔직하게 표현해라.
• 한 개념에 한 단어를 사용하라
  • 똑같은 메서드를 클래스마다 fetch, retrieve, get으로 섞어 쓰면 혼란스럽다.
  • 마찬가지로, 동일 코드 기반에 controller, manager,driver를 섞어 쓰면 혼란스럽다.
  • 이름이 다르면 클래스와 타입이 다르리라 생각하기 때문에 일관성 있는 어휘를 사용해야 한다.