클린코드

[DAY 2] 클린 코드 TIL - 1장. 깨끗한 코드

lado 2022. 1. 22. 23:38

🔖 오늘 읽은 범위 : 1장, 깨끗한 코드 (p.1~p.20)


😀 책에서 기억하고 싶은 내용

  • 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업, 바로 이것이 프로그래밍이다. 이렇게 명시한 결과가 바로 코드다. (p.2)
  • 그들은 출시에 바빠 코드를 마구 짰다. 기능을 추가할수록 코드는 엉망이 되어갔고, 결국은 감당이 불가능한 수준에 이르렀다. 회사가 망한 원인은 바로 나쁜 코드 탓이었다. (p.4)
  • 나중은 결코 오지 않는다. - 르블랑의 법칙(leblanc’s law) (p.4)
  • 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다. (p. 7)
  • 깨끗한 코드란?
    • 우아하고 효율적인 코드 by 비야네 스트롭스트룹Bjarne Stroustrup
      • 논리는 간단하게
      • 의존성은 최대한 줄이기
      • 오류는 철저히 처리(깨끗한 코드는 세세한 사항까지 꼼꼼하게 처리하는 코드)
      • 성능 최적화
      • 한 가지를 제대로 하기
      • 나쁜 코드는 너무 많은 일을 하려 애쓰다가 의도가 뒤섞이고 목적이 흐려진다
      • 효율은 속도 뿐만 아니라 CPU 자원 측면도 포함
    • 잘 쓴 문장처럼 읽히는 코드 by 그래디 부치Grady Booch
      • 단순하고 직접적으로
      • 설계자의 의도를 숨기지 않기
      • 명쾌한 추상화, 단순한 제어문
      • 반드시 필요한 내용만
      • 코드를 읽는 사람에게 프로그래머가 단호하다는 인상을 줘야 함
    • 작성자가 아닌 사람도 읽기 쉽고 고치기 쉬운 코드 by 데이브 토마스Dave Thomas
      • 테스트 케이스 작성
      • 의미 있는 이름 붙이기
      • 작을 수록 좋다
      • 언어에 따라 필요한 모든 정보를 코드 만으로 명확히 표현할 수 없기에 코드는 문학적으로 표현해야 함
    • 주의 깊게 작성한 코드 by 마이클 페더스Michael Feathers
    • 중복 줄이기, 표현력 높이기, 초반부터 간단한 추상화 고려하기 by 론 제프리스Ron Jeffries
      • 모든 테스트 통과
      • 중복 없음
      • 시스템 내 모든 설계 아이디어를 표현
      • 클래스, 메서드, 함수 등을 최대한 작게 쪼개기
    • 코드를 읽으면서 짐작했던 기능을 그대로 수행하는 코드 by 워드 커닝햄Ward Cunningham
      • 코드를 독해하느라 머리를 쥐어 짤 필요가 없어야 함
  • 다음에 코드를 짤 때는 자신이 저자라는 사실을, 여러분의 노력을 보고 판단을 내릴 독자가 있다는 사실을 기억하기 바란다. (p. 17)
  • 시간이 지나도 언제나 깨끗하게 유지해야 한다. (중략) 우리는 적극적으로 코드의 퇴보를 막아야 한다. (p. 18)
  • 캠프장은 처음 왔을 때보다 더 깨끗하게 해 놓고 떠나라. - 보이스카우트 규칙

🤔 오늘 읽은 소감은?

  • 프로젝트 기간에는 마감이 있다 보니 기능 구현을 빨리 쳐내는 게 중요하고 리팩토링은 우선순위가 좀 낮다고 생각해왔는데, 책에서 설명하는 사례를 보면서 클린 코드가 오히려 개발 속도를 더 빠르게 만들 수 있다는 걸 깨달았다.
  • 프로젝트하면서 머리를 쥐어 짜야 이해할 수 있는 코드들이 있었지만 그냥 넘어 갔었는데 그런 부분들을 개선하기 위해 노력해야겠다고 생각했다.
  • 그동안 코드 작성하는 게 글을 작성하는 것처럼 느껴질 때가 있었는데, 잘 쓴 문장처럼 읽혀야 깨끗한 코드라는 문장을 읽었을 때 공감이 많이 됐다. 내가 저자라고 생각하고 독자가 있다는 마음가짐으로 코드를 짜라고 하는 말이 인상 깊었다. 누군가에게 좋은 글을 전하는 마음으로 코드 한 줄 한 줄 허투루 쓰지 말아야겠다.

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

  • 론 제프리스가 추상화에 대해 말한 부분이 잘 이해가 되지 않았다.
    • 추상 메서드와 추상 클래스는 java 언어에 있는 개념이다.
    • 추상 메서드는 선언부만 존재하고, 구현부는 작성되어 있지 않은, 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메서드를 의미한다.
    • 추상 클래스는 추상 메서드를 하나 이상 포함하는 클래스이다. 자체적으로 인스턴스를 생성할 수 없고, 먼저 상속을 통해 자식 클래스를 만들고, 자식 클래스에서 추상 클래스 안의 모든 추상 메서드를 오버라이딩해야지만 자식 클래스의 인스턴스를 생성할 수 있다.
    • 여러 개발자가 함께 일할 때, 개발자마다 메서드명, 필드명 등을 동일하게 정의할 수 있게끔 공통된 내용을 추출하여 통일된 내용으로 작성하도록 규격화할 때 사용한다.
  • 직원 정보가 저장된 데이터베이스든, 키/값 쌍이 저장된 해시 맵이든, 여러 값을 모아놓은 배열이든, 프로그램을 짜다 보면 어떤 집합에서 특정 항목을 찾아낼 필요가 자주 생긴다. 이런 상황이 발생하면 나는 추상 메서드나 추상 클래스를 만들어 실제 구현을 감싼다. (p.14)

📌 소감 3줄 요약

  • 깨끗한 코드란 우아하고 효율적이며, 잘 쓴 문장처럼 읽히고, 다른 사람도 고치기 쉽고, 주의 깊게 작성했으며, 중복이 없고, 한 가지 기능만을 수행하고, 제대로 표현됐고, 작게 추상화됐으며, 코드를 읽으면서 짐작했던 기능을 그대로 수행하는 코드다.
  • 코드를 짤 때는 자신이 저자라는 사실을, 여러분의 노력을 보고 판단을 내릴 독자가 있다는 사실을 기억하자.
  • 나중은 결코 오지 않는다.