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

2장 이름에 정보 담기

라이피 (Lypi) 2018. 6. 12. 03:21
반응형

Part 1. 표면적 수준의 개선

2장. 이름에 정보 담기

  ★ 이름(식별자)에 정보를 담아내라. 이름을 일종의 설명문으로 생각하라. 좋은 이름은 생각보다 많은 정보를 전달할 수 있다.


__01. 특정한 단어 고르기  

  - 구체적인 단어를 선택하라. 더 '화려한' 단어를 찾아보면 그 변수에 더 적합한 단어를 찾는데 도움이 된다. 

  ★ 재치 있는 이름보다 명확하고 간결한 이름이 더 좋다.


__02. tmp나 retval 같은 보편적인 이름 피하기  

  ★ retval이라는 이름은 정보를 제대로 담고 있지 않다. 대신 변수값을 설명하는 이름을 사용하라.

  - 하지만 보편적인 이름이 필요한 의미를 더 전달하는 경우도 있다. 

  ★ tmp라는 이름은 대상이 짧게 임시적으로만 존재하고, 임시적 존재 자체가 변수의 가장 중요한 용도일때에 한해서 사용해야한다.

  - 루프 반복자에 조건문의 이니셜 등을 첨자로 넣으면 더 좋은 이름이 된다.

  ★ tmp, it, retval 같은 보편적인 이름을 사용하려면, 꼭 그렇게 해야 하는 이유가 있어야 한다. 


__03. 추상적인 이름보다 구체적인 이름을 선호하라  

  - 이름을 지을 때, 추상적인 방식이 아니라 구체적인 방식으로 묘사하라.

  - 예1 : 서버가 어느 TCP/IP 포트를 사용할 수 있는지 검사하는 내부 메소드의 이름은 ServerCanStart()보다 CanListenOnPort()가 더 구체적이다.

  - 예2 : DISALLOW_EVIL_CONSTRUCTOR라는 구글이 사용하던 매크로의 명칭은 사악한(evil)이라는 단어가 너무 강한 표현이고, 매크로가 금지하는(dssallowing)대상이 명확하지 않기 때문에 좋은 이름이 아니다. 이 이름은 DISALLOW_COPY_AND_ASSIGN으로 대체되었다.

  - 예3 : 저자들이 사용했던 --run_locally라는 명령행 플래그(command-lind flag) 옵션 1. 새로운 사람이 무엇을 위한 플래그인지 알기 어렵고, 2. 원격으로 실행되는 프로그램에 쓰이기에는 부적절한 이름이었고, 3. 성능 저하의 가능성이 있다는 사실을 담고 있지 않다는 문제점이 있었다. 핵심은 이 이름이 실제 내용보다 주로 사용되는 환경을 나타내는 방식으로 지어졌다는 점이다. 이 이름보다는 --extra_logging이라는 이름이 더 직접적이고 명확하다. 만약 이 플래그가 다른 작업도 수행하며 그 이름이 두가지 모두를 포괄할 수 있다하더라도 그럴때는 새로운 역할을 구체적으로 표현하는 새로운 플래그를 만드는 것이 더 좋다.

__04. 추가적인 정보를 이름에 추가하기  

  - 이름 안에 들어간 추가 정보는 사용할 때마다 전달된다. 따라서 사용자가 반드시 알아야 하는 정보를 이름에 포함시키는 것이 좋다.

  - 변수가 시간의 양이나 바이트의 수와 같은 측정치를 담고 있다면, 변수명에 단위를 포함시키는게 좋다.

  - 변수의 의미를 제대로 이해하는 것이 중요하다면 그 의미를 드러내는 정보를 변수의 이름에 포함시켜야 한다.


__05. 이름은 얼마나 길어야 하는가?  

  - 좁은 범위에서는 짧은 이름도 좋다. 하지만 어떤 이름이 넓은 범위에서 사용된다면, 의미를 분명하게 하는 것이 더 중요하다.

  - 팀에 새로 합류한 사람이 이름이 의미하는 바를 이해할 수 있다면 괜찮은 이름이다.

  - 제거해도 정보가 손실되지 않는 단어는 제거하는 것이 좋다.


__06. 이름 포메팅으로 의미를 전달하라  

  - 밑줄(underscores)과 대시(dashes) 그리고 대문자를 잘 이용하면 이름에 더 많은 정보를 담을 수 있다.

  - 문법적 차이가 드러나게 서로 다른 개체의 이름에 다른 포맷팅 방식을 적용하는 것은 코드를 더 읽기 쉽게 해준다.

  (요약자 생각 : 이런 포매팅은 어떤 것이 더 좋은가보다도 프로젝트 내에서 일관되게 사용하는 것이 중요하다.)


반응형