본문 바로가기
책 공부

읽기 좋은 코드가 좋은 코드다 (2)

by ppirae 2022. 10. 31.

4장. 미학

읽기 편한 소스코드를 위한 세 가지 원리

  • 코드를 읽는 사람이 이미 친숙한, 일관성 있는 레이아웃 사용하기
  • 비슷한 코드는 서로 비슷해 보이게 만들기
  • 서로 연관된 코드는 하나의 블록으로 만들기

일관성과 간결성을 위해 줄 바꿈을 재정렬하기

  • 같은 작업을 하는 함수는 줄바꿈과 정렬로 일관성 있는 모양새를 가지도록 해야 한다.

메소드를 활용하여 불규칙성을 정리하라

  • 중복되는 지저분한 부분을 함수화하라!
  • 코드를 미학적으로 개선하는 작업은 코드 구조를 개선하는 결과를 낳는다!

의미있는 순서를 선택하고 일관성 있게 사용하라

  • 서로간에 영향을 끼치지 않는 코드의 경우 의미 있는 순서로 일관성있게 나열하라

개인적인 스타일 대 일관성

  • 올바른 스타일보다 일관성 있는 스타일이 더 중요하다
  • 스타일을 선택할 때 실질적인 영향을 끼치지 않는다면, 일관성을 유지하는 방향으로 진행하라!

5장. 주석에 담아야 하는 대상

설명하지 말아야 하는 것

  • 무가치한 주석
    • 코드에서 빠르게 유추할 수 있는 내용
    • 새롭지 않은 정보
  • 설명을 위한 설명
  • 나쁜 이름에 대한 주석
    • 좋은 이름 > 나쁜 이름 + 좋은 주석
    • 나쁜 이름에 대한 변명을 하지 말자. 차라리 이름을 고치자!

생각을 기록하라

  • 좋은 주석은 코딩을 할 때 떠올린 중요한 생각을 기록하는 것만으로도 탄생할 수 있다!

 

감독의 설명을 포함하라

  • 중요한 통찰을 기록한 주석을 코드에 포함시키면, 코드를 읽는 사람이 무의미하고 중복적인 삽질을 하지 않게 할 수 있다!
    • 코드의 상태
    • 적용한 알고리즘에 대한 설명 및 성능
    • 에러나 버그 등의 가능성
    • 개선이 필요한 사항

상수에 대한 설명

  • 상수값을 어떻게 변경할 수 있는지, 해당 상수값이 어디까지 변경될 수 있는지에 대해 서술하면 좋다. 해당 상수값을 만들 때 어떤 생각을 하고 있었는지를 밝히면 코드를 이해하는 데 도움이 된다!

 

코드를 읽는 사람의 입장이 되어라

  • 코드를 처음으로 읽는 외부인의 입장에서 코드를 읽어라

 

나올 것 같은 질문 예측하기

  • 질문이 나올 것 같은 부분에 주석을 추가하자

 

사람들이 쉽게 빠질 것 같은 함정 경고하기

  • 코드를 읽으며 예상하지 못할 것 같은 부분이 있는가?
  • 오용될 가능성이 있는 부분이 존재하는가?

큰 그림에 대한 주석

  • 클래스들이 어떻게 상호작용하는가?
  • 전체 시스템에서 데이터가 어떻게 이동하는가?
  • 출발점이 어디인가?

요약 주석

  • 해당 함수의 역할을 간단하게 요약하여 주석으로 추가할 수 있다.
  • 기능에 따른 블록별로 주석을 추가하여 전체적인 내용을 요약할 수 있다.

6장. 명확하고 간결한 주석 달기

모호한 대명사 피하기

  • 바로 위에서 설명된 내용이다! "그것"이나 "이것"을 구체적으로 서술하자.

엉터리 문장 다듬기

  • 간단하고, 짧고, 직접적인 문장을 추구하라

함수의 동작을 명확하게 설명하기

주석에서 서술하는 단어를 정확하게 정의해야 한다.

  • 이 파일에 담긴 줄 수를 반환한다 👉 줄 수란 무엇인가? 명확한 정의 필요!
  • 이 파일 안에 '\n'이 몇개 있는지 센다 👉 줄 수 = '\n'에 대한 명확한 정의가 이제는 존재!

코너케이스를 설명해주는 입출력 예시를 사용하기

  • 여러 가지 변수와 환경의 복합적인 상호작용으로 발생하는 케이스를 말한다!

이름을 가진 함수 파라미터 주석

  • 함수의 인수에 주석을 달아 해당 인수가 무엇을 의미하는지에 대한 정보를 추가하자!

7장. 읽기 쉽게 흐름제어 만들기

코드를 읽다 다시 읽으러 되돌아가지 않게끔, 흐름 제어 및 루프 조건을 최대한 자연스럽게 만들어야 한다.

영어의 어순과 일치하도록 짜는 것이 좋다!

if/else 블록 순서

  • 부정이 아닌 긍정을 다루기
  • 간단한 것을 먼저 처리하기
  • 더 흥미롭고, 확실한 것을 먼저 다루기

삼항 연산자 사용하기

  • 줄 수를 최소화하기 <<< 다른 사람이 읽고 이해하는 데 걸리는 시간 최소화하기
  • 기본적으로 if/else를 사용하되, 매우 간단한 연산에만 삼항 연산자를 사용하기!

do-while 루프 피하기

  • do-while 루프는 코드를 두 번 읽게 되므로, 가독성에 좋지 않다!
  • 조건은 "눈에 뜨이는 곳에 미리" 존재하도록 해야 한다

중첩 제거

  • 함수 중간 반환을 이용하면 중첩된 중첩을 손쉽게 제거할 수 있다.
  • 루프에서의 중간 반환은 continue를 사용하자

8장. 거대한 표현을 잘게 쪼개기

설명 변수

  • 추가 변수라고도 한다.

요약 변수

  • 커다란 코드의 덩어리를 짧은 이름으로 대체하여 더 쉽게 관리하고자 하는 목적으로 만드는 변수

요약 변수 사용의 장점

  • 자주 사용하는 조건의 경우 길게 보면 결국 전체적인 코드 길이를 줄인다.
  • 타이핑 실수의 확률을 줄인다.
  • 코드를 한 눈에 훑어보는 것이 용이하게 해 준다.
  • 이후 수정을 위해 건드려야 하는 곳이 줄어든다.

댓글