연재 완료/읽기 좋은 코드 (Book review)

3장 오해할 수 없는 이름들

라이피 (Lypi) 2018. 6. 12. 14:02
반응형

Part 1. 표면적 수준의 개선

3장. 오해할 수 없는 이름들
  ★ 본인이 지은 이름을 "다른 사람들이 다른 의미로 해석할 수 있을까?"라는 질문을 던져보며 철저하게 확인해야 한다.


__01. 예: Filter()  

  -filter라는 변수명은 의미가 모호하다. 대상을 '고르는' 기능을 원한다면 select가 '제거하는' 기능을 원한다면 exclude가 더 낫다.

__02. 예: Clip(text, length) 

  - 어떤 문단의 내용을 오려내는 함수 Clip(text,length)라면 두가지 방식으로 이해할 수 있다. 이 함수의 기능은 문단을 처음부터 최대 length만큼 잘라내는 것이므로 truncate(text,max_chars)가 더 좋다. 

__03. 경계를 포함하는 한계값을 다룰 때는 min과 max를 사용하라  
  - CART_TOO_BIG_LIMIT라는 이름은 '그 수까지(up to)'를 의미하는지, '그 수까지(up to including)'를 의미하는지 분명하지 않다.

  ★ 한계를 설정하는 이름을 가장 명확하게 만드는 방법은 제한받는 대상의 이름 앞에 max_나 min_을 붙이는 것이다.  

      (max나 min은 그 값을 포함한다는 의미를 갖는다.)

    

__04. 경계를 포함하는 범위에는 first와 last를 사용하라  
  - 경계의 양 끝점을 포함하는 범위에는 first와 last가 적절하다. 이는 시작점과 끝점이라는 정보를 명확하게 전달한다.


__05. 경계를 포함하고/배제하는 범위에는 begin과 end를 사용하라  

  - 시작점에서는 경계를 포함하고, 끝점에는 포함하지 않는 범위에는 bigin과 end가 관행적으로 가장 적절하다. 


__06. 불리언 변수에 이름 붙이기  

  - 불리언 변수 혹은 불리언 값을 반환하는 함수에 이름을 붙일 때는 true와 flase가 각각 무엇을 의미하는지 명확해야 한다. 일반적으로 is, has, can, should와 같은 단어를 더하면 불리언값의 의미가 더 명확해진다. 또한 이름에서는 의미를 부정하는 단어를 피하는 것이 좋다. 


__07. 사용자의 기대에 부응하기  
  - 프로그래머들이 어떤 이름을 이미 특정한 방식으로 이해해서 실제와 다른 의미로 관행적으로 사용하는 것들이 있다. 이런 경우에는 그것을 따르는 것이 좋다. 

  - get*() : get으로 시작되는 이름의 메소드는 '가벼운 접근자(lightweight accessos'로서 단순히 내부 멤버를 반환한다고 관행적으로 생각한다. 

  - list:size() : list.size()는 C++표준라이브러리에 있던 메소드인데 이는 O(n)연산을 했다. 하지만 프로그래머들은 size() 메소드가 일정한 시간을 소비한다고 관행적으로 생각한다. c++에 존재하는 다른 모든 size()메소드는 일정한 시간을 소비하기 때문이다. 이럴때는 메소드명을 size()가 아니라 countSize()나 countElements()라 했다면 오해를 피할 수 있었을 것이다. 다행이도 최근에 C++ 표준 라이브러리에서 "size()는 O(1)이어야 한다."는 규칙을 정했다.


__08. 예: 이름을 짓기 위해서 복수의 후보를 평가하기  
  - 좋은 이름을 정하기 위해서는 여러개의 후보를 놓고 이것이 명확한 의미를 전달하는지를 따져보는 습관을 가질 필요가 있다.

 


반응형