본문 바로가기
이것저것(독후감같은거)

읽기 좋은 코드가 좋은 코드다

by 혜룐 2016. 2. 1.

읽기 좋은 코드가 좋은 코드다 를 읽었다.

리팩토링이나 객체지향설계코드책보다 더 쉽게 다뤄져있어서 금방 읽은것 같다.



  • 이름에 정보를 담아내자.
    • 언제 그런 이름을 사용해야하는지 깨닫기
      • web에서 페이지를 다운로드 하고, 파싱해야 하는 함수가있다면 getPage -> downloadPage가 더 낫다.
    • 특정한 단어를 잘 고르기
    • 상황에 적합한 단어를 쓰기
      • send :  delivery, route, dispath, announce 
        • send는 모호하고 구체적이지 않다. 용도에 맞게 구체적인 단어를 잘 선택하자
    • 루프 반복시, index 에 의미가 있고, 그 값으로 체크를 한다면, i,j 보다 구체적인 의미가 담긴 네이밍을 하자
    • 추가적인 정보를 이름에 추가하자
      • 16진수 문자열인 id이면: id -> hex_id가 더 좋고
      • 단위를 포함하는 경우라면 단위를 포함시켜, 보는 사람이 단위에 대한 연산을 하게 하지 ㅏㄹ자.
    • 좁은 범위에서는 짧은 이름을 권장하지만, 클래스의 멤버나, 전역변수안에서는 자세한게 좋다.
    • 문자의수를 변수로 표현한다면?: max_chars 처럼 자세한게 좋다.
    • 경계를 포함하는 한계값을 다룰때는 변수앞에 min/max
    • 경계를 포함하는 범위에는 first / last
    • 경계를 포함하고.배제하는 경우에는 begin / end
    • 네이밍을 하기 전에는 복수의 후보를 두고 골라. (역시 이건.. 많이 해봐야됨..)
    • 편한 소스코드란?
      • 일관성있는 레이아웃
      • 비슷한 코드를 서로 비슷해 보이게 만들고
      • 단락을 두어 하나의 블럭으로 만들어라
      • 미학적으로 보기 좋은 코드가 사용하기 더 편하다.
    • 주석에 담아야 하는 대상
      • 머릿속에 있는 정보를 기록하라. 주석은 네머릿속에 있는 정보를 기록하는거다. 코드를 읽는 사람의 입장에서 필요한 정보가 무엇인지 유추하고, 너가 한 고민을 적으면 된다.
      • 함수위에 주석을 달고싶으면
        • 더 중요한, 세부사항을 적어라.
        • findNodeSubtree(subtree, name, depth)라는 함수가 있다. 주석을 달고 싶으면
        • name을 이용해서 노드를 찾는다가 아니라
          • node 를 찾는데 일치하는 name이 없으면 null을 반환한다.
          • depth <0 이면 subtree만 검색한다. 이런 주석이 의미있다.
      • 정리하면, 무엇을 설명해야할까?
        • 너의 생각. 중요한 동작을 기록하고
        • 코드의 결함이 있거나 불완전한 내용을 설명하라.
        • TODO: 더 빠른 알고리즘이 필요하다. 등의 설명이 제일 좋다.
    • 상수에 대한 설명
      • 보통 특정한 임계치는 사연이 존재한다. 이럴때는 상수네이밍을 구체적이고 자세하게 적고, 설명도 추가하면 좋다.
    • 중첩 / 분기
      • if (length > 10) /  if(10 < length) : 전자 코드가 더 익숙하다.
      • while( received <expected ) / while (expected > received) :전자 코드가 더 익숙하다
      • 부정보다 긍정에 대해 다루어라. 예를 들어 글장성자가 아닌 경우에만 이코드를 실행하라고 되어있다면 이는 글의작성자인 경우로 if 조건문을 만드는게 좋다.
      • 간단한것먼저 처리한다.
      • 확실한것은 먼저 다루어라.
      • 삼항연산자는 정말 간단한거 아니면 쓰지말라. if/else가 가독성이 더 좋다.
      • if( user_id === owner_id) blabla... if(user_id != owner_id) 등 의 코드는 
      • boolean has_user_owner_doc = user_id == owner_id 의 함수를 만들고 함수를 콜하는 방식이 낫다.
    • 드모르간의 법칙을 사용하기
      • not을 분배하고 , not은 밖으로 꺼낸다.
      • and/or 을 바꿔라
    • 변수의 범위를 줄여라
      • 함수 / 클래스/ 파일로 쪼개어 변수의 범위를 줄이는게 좋다.
      • 변수의 값은 한번만 할당되는것이 좋고, 값이 자주 변경되는 것이라면 위처럼 분리해라.
      • 변수의 정의는 사용되는 로직 바로 위에 선언하는 것이 좋다.
      • 이는 SRP를 지킬수 있다.
    • 여러개의 조건이 하나의 결과값을 만드는 경우라고 하면
      • 기본값 =간단한것 부터 시작해서 가장 구체적인값으로 조건을 처리 하는 것이 좋다.