본문 바로가기

독서

[리뷰] 읽기 좋은 코드가 좋은 코드다 : 더 나은 코드를 작성하는 간단하고 실전적인 테크닉

yes24의 이미지를 퍼왔습니다.  http://www.yes24.com/Product/Goods/6692314

 

 도서관에서 제목을 보고 관심이 생겨서 읽어봤습니다. 제목 그대로 읽기 좋은 코드, 좋은 코드에 대한 내용을 다룹니다.

글 자체도 쉽게 설명되어있고, 다양한 코드를 예시로 보여주어서 코딩을 해본 사람이라면 어렵지 않게 잘 읽을만한 정보서였네요. 코드 습관이 아직 잘 잡히지 않은 제게는 도움되는 정보가 많았습니다.

 모르는 언어로 된 예시가 나오기도 했지만, 컴퓨터 언어들이 일맥상통하는 부분이 있어서 대충 무슨 뜻이겠구나~ 하고 알아볼 정도는 되었습니다. 

 

두고두고 볼까해서 각 챕터마다 끝부분에 나오던 챕터 요약을 정리해 보았습니다. 

 

1부 표면적인 수준에서의 개선

1. 이름에 정보를 넣기

  • 특정한 단어 사용(더 구체적이고 명확한 단어)
  • 중요한 세부 정보를 덧붙이기
  • 사용 범위가 넓으면 긴 이름, 좁으면 짧은 이름
  • 대문자나 밑줄을 의미 있는 방식으로 활용(클래스 멤버는 뒤에 _ 붙이기 등)

2. 변수명과 함수명

  • 이름에 오해가 발생하지 않게

3. 미학

  • 코드를 일관성 있게, 의미 있는 방식으로 정렬
  • 의미 있는 순서를 정해 모든 곳에서 순서를 지키기(알파벳 순, 작동 순 등)
  • 커다란 블록을 논리적 문단으로 나누기
  • 코드를 '열'로 만들어 줄을 맞추기

4. 주석

  • 기록할 필요 X
    • 코드 자체에서 빠르게 알 수 있는 사실
    • 나쁘게 작성된 코드를 보정하려 애쓰는 주석(그냥 코드를 수정하는게 나음)
  • 기록할 필요 O
    • 코드가 이 방식으로 작성된 이유 설명
    • 코드에 담긴 결함. TODO: ~ 같은 표시
    • 상수가 특정한 값을 가지는 '사연'

2부 루프와 논리를 단순화하기

1. 흐름제어

  • 비교 구문 작성 시 (변화값 < 안정값)
    • 예시 : '당신'이 적어도 '18세'라면 / 만약 '18년'이 당신의 '나이'보다 작다면
  • 중첩은 최소화하기
  • 삼항 연산자는 간단할 때만

2. 거대한 표현 잘게 쪼개기

  • 하위표현을 간결한 이름으로 대체 (설명 변수 도입)
  • 드 모르간의 법칙 : if(!(a && !b)) → if(!a || b)
    • 문제의 의미를 거꾸로 부정하거나 의도한 목적의 반대를 생각하면 더 간단해지는 경우도 있음.

3. 변수와 가독성

  • 방해되는 변수 제거 : 결과를 즉시 처리해 중간 결과값을 저장하는 변수 제거
  • 각 변수의 범위를 좁게
  • 가급적 값이 한 번만 할당되는 변수를 사용하기

3부 코드를 재작성하기

1. 상관없는 하위문제 추출

  • 일반적인 목적의 코드(재사용이 용이함)를 특정 프로젝트에 종속되는 코드와 분리.
    • 일반적 코드→ 라이브러리와 헬퍼 함수로 이루어진 집합으로 따로 구성

2. 한번에 하나씩

  • 한 번에 하나의 작업만 수행
  • 읽기 어려울 땐 수행하는 작업을 모두 나열 후 '논리적 문단' 별로 분리

3. 생각을 코드로

  • 프로그램을 쉬운 말로 설명하기 : 문제의 틀을 제대로 잡는 데에 도움이 됨

4. 코드 분량 줄이기

  • 불필요한 기능 제거, 과도한 작업 피하기
  • 요구사항 다시 생각해보기
  • 주기적으로 라이브러리 전체 API 훑어보기 → 이미 라이브러리에 있는 기능을 잘 활용하기

4부 선택된 주제들

테스트와 가독성

  • 각 테스트의 최상위 수준은 최대한 간결하게
  • 테스트 실패 시 버그 추적에 도움이 될 만한 에러 메시지 출력
  • 불필요하게 어려운 값 쓰지 말기, 가급적 간단하고 적은 입력으로
  • 무엇이 테스트되는지 분명하게 드러나는 테스트 함수 이름