읽기 좋은 코드가 좋은 코드다/1 - 이름에 정보담기

‘읽기 좋은 코드가 좋은 코드다’를 읽고 정리한 내용입니다. 문제가 될 시에는 삭제하겠습니다.

이름에 정보담기

변수, 함수 혹은 클래스 등의 이름을 결정할 때에는 항상 같은 원리가 적용된다. 처음 접하는 부분이 바로 이름인데, 이 이름을 어떻게 짓느냐에 따라 코드의 품질이 달라지기도 한다. 함수명이나 클래스명 또는 변수명에 해야하는 일이나 어떠한 일을 하는지에 대한 설명이 들어가 있으면 해당 이름만을 보고도 코드를 이해하는데 한결 도움을 줄 수 있다. 그런 방법들은 아래의 여섯 가지의 방법으로 적용될 수 있다.


특정한 단어 고르기

매우 구체적인 단어를 선택하여 무의미한 단어를 피하는 것이다.


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

메소드나 변수 이름에 하려는 일을 구체적으로 묘사해야 하고 하나의 의미에 여러가지의 기능이 들어가있는 경우에는 이름을 분리하여 적용하는 것이 바람직하다.

  • ServerCanStart() -> CanListenOnPort() : 구체적으로 묘사
  • runLocally -> extraLogging, useLocalDataBase : 여러 가지의 기능이 들어있는 변수명을 두개로 분리


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

변수의 이름은 작은 설명문이다. 따라서 변수이름을 신중하게 생각하는 것은 당연하다. 예를들어, 16진수의 문자열을 id로 가지는 변수가 있다고 생각해보면, 그냥 id라는 변수명보다는 hex_id라는 변수명이 데이터의 종류도 설명해줄 수 있어서 효율적이다.

  • 변수가 시간의 양이나 바이트의 수와 같은 측정치를 가지고 있다면 변수명에 단위를 포함시키는 것이 좋음
  • 변수의 상태에 따라 결과가 달라진다면 변수의 상태와 그 결과를 내용에 담아주는 것도 좋음


이름의 길이는? 길어도 된다

좁은 범위에서는 짧은 이름을 사용하여 변수명을 정하는 것이 좋다. 변수의 타입이 무엇이고, 어떠한 값을 다루는지는 좁은 범위에서 사용되기 때문에 쉽게 확인할 수 있다. 따라서 모든 내용을 변수에 설명으로 넣어줄 필요는 없다. 하지만 넓은 범위, 주로 클래스 등에서 사용되는 변수는 한눈에 어떠한 역할을 하는지 파악하기 쉽지 않으므로 어느정도 긴 이름의 설명을 넣어서 변수명을 정하는 것이 바람직하다.

변수명의 길이를 줄이기 위해 약어를 사용하는 것은 옳지 못하다. IDE등에서 자동완성을 지원하기 때문에 요즘에는 어느정도 변수명이나 클래스의 이름이 길어도 상관없다.

또한 불필요한 단어를 제거하면 길다고 생각되는 변수명의 길이를 줄일 수 있다. 예를 들어, convertToString()toString()이라는 이름으로 줄일 수 있다.


이름 포맷팅으로 의미를 전달하라

예를 들어, 로컬에서 사용하는 변수들의 마지막에는 _를 추가한다면 한눈에 변수들의 scope를 파악할 수 있다. 마찬가지로, HTML/CSS에서 id를 _로 구분하고, class를 -로 구분하면 한눈에 어떠한 selector인지 확인할 수 있다.

오해할 수 없는 이름들


경계와 관련된 변수 이름들

경계를 포함하는 범위에는 first와 last를, 경계를 배제하는 범위에는 begin과 end를 사용하라. 어떠한 경우에는 범위를 포함하지 않는 경우가 좀 더 한눈에 보이도록 할 수 있다.


boolean 변수에 이름 붙이기

boolean 변수에는 is, has, should, can 등의 이름을 사용하여 변수명을 정하라. boolean 변수 이름에는 부정적인 의미를 피하는 것이 좋다. 그래야 사용자가 머리속에서 한번 더 의미를 생각해 보는 시간을 줄일 수 있다.


사용자의 기대에 부응하기

예를 들어, get**()이라는 이름의 메소드가 존재하는 경우, 이 메소드를 사용할 때 어떠한 값을 간단하게 얻어 올 수 있을 것이라는 사용자의 추측이 존재한다. 따라서 어떠한 값을 그냥 반환하는 것이 아니고 연산을 통해 값을 생성하는 것이라면 computemake라는 이름이 더 어울릴 수 있다.