Post

Clean Code 01장. 깨끗한코드

TIL(Today I Learn)

2024.06.22

오늘 읽은 범위

추천사 ~ 1장. 깨끗한 코드

책에서 기억하고 싶은 내용을 써보세요.

  • 좋은 소프트웨어를 개발하기 위해서는 장인 정신이 필요
    • 장인에게 필요한 원칙, 패턴, 기법, 경험이라는 지식을 습득
    • 열심히 일하고 연습해 지식을 몸과 마음으로 체득
  • 깨끗한 코드를 작성하는 방법
    • 단순히 원칙과 패턴을 안다고 깨끗한 코드가 만들어지지 않음
    • 스스로 연습하고 실패하는 등 다양한 경험이 필요
      • 결정을 내리느라 고민하는 경험
      • 잘못된 결정으로 대가를 치르는 경험
  • 시간을 들여 깨끗한 코드를 만드는 노력이 비용을 절감하는 방법이자 전문가로서 살아남는 길

  • [비야네 스트롭스트룹]이 생각하는 클린 코드
    • 우아하고 효율적인 코드
      • 보는 사람에게 즐거움을 주는 코드
      • 우아하지 않은 코드는 바람직하지 않은 결과를 초래
    • 논리가 간단해야 버그가 생기지 않음
    • 의존성을 최대한 줄여야 유지보수가 쉬워짐
    • 오류는 명백한 전략에 의거해 철저히 처리
      • 개발자들이 특히 신경쓰지 않는 부분
    • 성능을 최적으로 유지하여 사람들이 원칙 없는 최적화로 코드를 망치려는 유혹을 방지
      • 나쁜 코드는 나쁜 코드를 유혹(ex. 깨진 유리창 현상)
    • 깨끗한 코드는 한 가지를 제대로 수행
      • 나쁜 코드는 너무 많은 일을 하려다가 의도가 뒤섞이고 목적이 흐려짐
  • [그래치 부치]가 생각하는 클린 코드
    • 깨끗한 코드는 단순하고 직접적임
    • 깨끗한 코드는 잘 쓴 문장처럼 읽힘
    • 깨끗한 코드는 결코 설계자의 의도를 숨기지 않음
      • 코드는 추측이 아니라 사실에 기반해야 하며, 필요한 내용만 담음
      • 코드를 읽는 사람에게 프로그래머가 단호하다는 인상을 줄 수 있음
  • [큰 데이브 토마스]가 생각하는 클린 코드
    • 작성자가 아닌 사람도 읽기 쉽고 고치기 쉬워야 함
    • 단위 테스트 케이스와 인수 테스트 케이스가 존재
    • 의미 있는 이름이 붙임
    • 특정 목적을 달성하는 방법은 하나만 제공
    • 의존성은 최소이며 각 의존성을 명확히 정의
    • API는 명확해야 하며 최소한으로 줄임
    • 모든 정보를 코드만으로 명확히 표현할 수 없기에 코드는 문학적으로 표현
  • [마이클 패더스]가 생각하는 클린 코드
    • 누군가 주의 깊게 짰다는 느낌을 줄 수 있어야 한다.
  • [론 제프리스]가 생각하는 클린 코드
    • 모든 테스트가 통과
    • 중복이 없음
      • 같은 작업을 여러 번 반복한다면, 코드가 아이디어를 제대로 표현하지 못한다는 것
      • 메서드가 여러 기능을 수행한다면, 메서드 추츨 리팩터링 기법으로 메서드를 나눌 수 있음
    • 시스템 내 모든 설계 아이디어를 표현
      • 의미 있는 이름을 짓는 것이 이에 해당
    • 클래스, 메서드, 함수 등을 최대로 줄임
  • [워드 커닝햄]이 생각하는 클린 코드
    • 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행
    • 코드가 해당 문제를 풀기 위한 언어처럼 보여야 함
  • [저자]가 생각하는 클린 코드
    • 앞으로 책 내용을 통해서 설명할 것
    • 깨끗한 변수 이름, 깨끗한 함수, 깨끗한 클래스를 만드는 방법 등…
    • 코드를 작성하는 시간보다 코드를 읽는 시간이 대부분이므로 읽기 쉬운 코드가 굉장히 중요함

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.

  • ChatGPT 등 생성형 AI 등이 등장하면서 개발자들의 역할이 축소될 것이라는 이야기가 많이 나온다. 그렇다고 해서 이런 도구들이 비즈니스 업무에 필요한 요구사항까지 알아서 판단해주지는 않을 것이다. 따라서 요구사항을 상세하게 표현할 수 있는 수단은 계속 존재할 것이며, 코드가 이런 역할을 계속하게 될 것이다. 앞으로 생성형 AI 도구들을 보조적으로 잘 활용하며 클린 코드를 개선할 수 있는 개발자 역량이 중요해질 것이라 생각한다.

  • 유명한 개발자들이 클린 코드와 관련되어 조언해주는 내용에는 공통점들이 많은 것 같다. 앞으로 이 책을 읽어 나가면서 문맥 안에 숨겨진 진짜 의미들을 이해할 수 있기를 기대하며, 클린 코드를 작성할 수 있는 개발자가 되기를 기대한다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • 휴리스틱(heuristic)이라는 용어는 소프트웨어 개발과 관련된 다양한 결정을 내릴 때 사용되는 경험적 규칙이나 방법을 의미한다. 이는 절대적인 규칙이 아닌, 상황에 따라 유연하게 적용될 수 있는 지침으로, 코드의 품질을 높이고 유지보수를 쉽게 하며, 가독성을 개선하기 위한 것이다.
This post is licensed under CC BY 4.0 by the author.