클린코드

[DAY 9] 클린 코드 TIL - 5장. 형식 맞추기

lado 2022. 1. 30. 23:35

🔖 오늘 읽은 범위 : 5장, 형식 맞추기 (p.96 ~ p.116)


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

  • 프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다.

  • 코드 형식은 의사소통의 일환이다.

  • 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다.

    • 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지 보수 용이성과 확장성에 계속 영향을 미친다.

  • 이름은 간단하면서도 설명이 가능하게 짓는다. 이름만 보고도 올바른 모듈을 살펴보고 있는지 아닌지를 판단할 정도로 신경 써서 짓는다.

  • 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 묘사한다. 마지막에는 가장 저차원 함수와 세부 내역이 나온다.

  • 생각 사이는 빈 행을 넣어 분리해야 마땅하다.

    • 빈 행은 새로운 개념을 시작한다는 시각적 단서다.

    • 패키지 선언부, import 문, 각 함수 사이에 빈 행이 들어간다.

  • 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다.

    • 타당한 근거가 없다면 서로 밀접한 개념은 한 파일에 속해야 한다.

    • 연관성은 한 개념을 이해하는 데 다른 개념이 중요한 정도다. 연관성이 깊은 두 개념이 멀리 떨어져 있으면 코드를 읽는 사람이 소스 파일과 클래스를 여기저기 뒤지게 된다.

  • 변수 선언

    • 변수는 사용하는 위치에 최대한 가까이 선언한다.

    • 지역 변수는 각 함수 맨 처음에 선언한다.

    • 루프를 제어하는 변수는 흔히 루프 문 내부에 선언한다.

    • 인스턴스 변수는 클래스 맨 처음에 선언한다.

      • 잘 알려진 위치에 인스턴스 변수를 모은다는 사실이 중요하다.

  • 함수 선언

    • 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다.

    • 상수를 알아야 마땅한 함수에서 실제로 사용하는 함수를 넘겨주는 방법이 더 좋다.

    • 친화도가 높을수록 코드를 가까이 배치한다.

      • 친화도가 높은 요인

        • 한 함수가 다른 함수를 호출해 생기는 직접적인 종속성

        • 변수와 그 변수를 사용하는 함수

        • 비슷한 동작을 수행하는 일군의 함수

    • 호출되는 함수를 호출하는 함수보다 나중에 배치한다.

      • 소스 코드 모듈이 고차원에서 저차원으로 자연스럽게 내려간다.

    • 신문 기사와 마찬가지로 가장 중요한 개념을 가장 먼저 표현한다.

      • 가장 중요한 개념을 표현할 때는 세세한 사항을 최대한 배제한다. 세세한 사항은 가장 마지막에 표현한다.

  • 프로그래머는 짧은 행을 선호한다.

    • 개인적으로는 120자 정도로 행 길이를 제한한다.

  • 가로로는 공백을 사용해 밀접한 개념과 느슨한 개념을 표현한다.

  • 범위로 이뤄진 계층을 표현하기 위해 코드를 들여쓴다.

  • 한 소스 파일에서 봤던 형식이 다른 소스 파일에도 쓰이리라는 신뢰감을 독자에게 줘야 한다. 온갖 스타일을 뒤섞어 소스 코드를 필요 이상으로 복잡하게 만드는 실수는 반드시 피한다.


🤔 오늘 읽은 소감은?

  • 신문 기사처럼 쓰라는 비유가 참 와닿았다. 확실히 처음부터 세부 구현을 보여주면 가독성이 떨어질 수밖에 없을 것 같다.
  • 띄어쓰기나 맞춤법을 하나만 틀려도 그 글은 독자에게 신뢰를 잃을 수 있다. 코드 규칙을 정해도 가면 갈 수록 번거롭다는 이유로 그냥 편하게 작성하고 싶은 욕망에 사로잡힐 때가 있는데, 읽는 사람에게 신뢰를 준다는 생각으로 규칙을 잘 지키기 위해 신경 써야겠다고 다짐했다.
  • prettier에서 printWidth를 80이나 120에 맞춰서 사용하는 경우가 많다고 느꼈는데, 그냥 나온 숫자가 아니라 클린 코드에 기반한 숫자였다는 데에서 충격을 받았다. 행 길이나 가로 공백까지는 신경을 써본 적이 없는데, 그런 것까지 신경을 쓰다니 정말 장인 정신이 느껴졌다.

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

  • 호출되는 함수를 호출하는 함수보다 나중에 배치하라는 규칙이 const, let을 사용할 때도 적용이 되는지 궁금했는데, 함수 호출을 맨 마지막에 해주면 ‘선언 전에 호출할 수 없다’는 에러가 뜨지 않는다는 걸 확인했다.
  • 인스턴스 변수라는 개념을 잘 이해하지 못했다.

📌 소감 3줄 요약

  • 호출되는 함수보다 호출하는 함수를 나중에, 코드는 고차원에서 저차원으로 작성하자.
  • 읽는 사람에게 신뢰를 주기 위해 코드 규칙을 잘 지키자.
  • 행 길이, 가로 공백 등 그냥 만들어진 컨벤션은 없다는 걸 느꼈다. 글자 하나 하나마다 의도를 갖고 코드를 작성하자.