클린코드 - 02. 의미있는 이름

의도를 분명히 밝혀라

변수(혹은 함수나 클래스)

  • 존재이유?
  • 수행기능?
  • 사용방법?

이 모든 것을 답하기 위해 주석이 필요하다면 의도를 분명히 드러내지 못했다는 뜻.

 

그릇된 정보를 피하라

그릇된 단서는 코드의 의미를 흐린다

  • 나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해도 안된다
    • 실제 컨테이너가 List가 아닐 경우 List로 명명하면 그릇된 정보를 제공하므로 이렇게 명명하지 않는다
    • 실제 List여도 컨테이너 유형의 이름에 넣지 않는 것이 바람직하다
  • 유사한 개념은 유사한 표기법을 사용한다
    • 이름만 보고 정보를 추측하기 때문에 일관성이 떨어지는 표기법은 그릇된 정보다
    • 연관성이 없는 것에 대해 비슷한 단어를 사용했을 경우 연관이 있다고 생각하는 오류를 범하기 때문에 흡사한 이름을 사용하지 않는다.
  • I과 O는 숫자와 유사하기 때문에 그릇된 정보가 될 수 있다

 

의미있게 구분하라

단순 컴파일러나 인터프리터를 통과하는 네이밍은 문제를 일으킨다.

  • 연속적인 숫자를 덧붙이지 않는다
    • a1, a2, ....aN
    • 의도적인 이름과 정반대이며 아무런 정보를 제공하지 못하는 이름이다
    • 저자의 의도가 드러나지 않는다
  • 불용어를 추가한 이름은 아무런 정보도 제공하지 못한다
    • Info, Data는 a, an, the와 마찬가지로 의미가 불분명한 불용어이다
      • 접두어를 사용하지 말라는 소리가 아니다
      • Name, NameString에서 Name은 String일 확률이 대부분 이므로 불용어다
      • customerInfo - customer, accountData - account, TheMessage - message와 구분이 안되기 때문에 차이를 알 수 있도록 한다 

 

발음하기 쉬운 이름을 사용하라

발음하기 어려운 이름은 토론하기도 어렵다

  • 긴 단어를 합쳐서 줄임말로 쓸 경우 의사소통에 문제가 생길 수도 있다

 

검색하기 쉬운 이름을 사용하라

문자 하나를 사용하는 이름(짧은)보다 길더라도 검색해서 찾아내기 쉬운 이름이 좋다

  • e로만 검색할 경우 무수히 많은 검색 결과가 나온다
  • 버그가 있을 경우 찾기 쉬운 이름이 짧은 이름보다 때론 좋다

 

인코딩을 피하라

  • 헝가리식 표기법
    • 에디터 등의 발전으로 변수 이름에 타입을 인코딩할 필요가 없다
    • 타입을 바꾸기가 어려워지고 읽기도 힘들다
    • 독자를 오도할 가능성도 커진다
  • 멤버 변수 접두어
    • 클래스와 함수는 접두어가 필요없을 정도로 작아야한다
  • 인터페이스 클래스와 구현 클래스

 

자신의 기억력을 자랑하지 마라

  • 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야한다면 바람직하지않다
    • 일반적인 변수 이름이 아니었기에 생기는 문제
  • 문자 하나만 사용하는 변수 이름은 문제가 있다
    • 루프에서 범위가 작고 다른 이름과 충돌하지 않을 때는 괜찮다
      • 루프에서 반복 횟수 변수는 전통적으로 한 글자를 사용하기 때문에...
    • a와 b를 사용한다고 가정했을때 c를 선택해 사용한다면 최악이다

 

클래스 이름

  • 명사나 명사구가 적합하며 동사는 사용하지 않는다.
  • Manager, Processor, Data, Info 등과 같은 단어는 피한다

 

메서드 이름

  • 동사나 동사구가 적합
  • Javabean 표준에 따라 값 앞에 get, set, is를 붙인다

 

기발한 이름은 피하라

  • 의도를 분명하고 솔직하게 표현해야한다

 

한 개념에 한 단어를 사용하라

  • 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다
    • fetch, retrieve, get | controller, manager, driver으로 제각각 쓰면 혼란스럽다
  • 이름이 다를 경우 당연히 클래스, 타입도 다르다 생각한다

 

말장난을 하지마라

  • 한 단어를 두 가지 목적으로 사용하지 마라
    • add가 하나의 값에 더한다는 의미라면 집합에 값을 추가하는 경우에는 add보다 insert나 append라는 이름을 사용한다

 

해법 영역에서 가져온 이름을 사용하라

기술 개념에는 기술 이름이 가장 적합한 선택이다

  • 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 괜찮다

 

문제 영역에서 가져온 이름을 사용하라

'프로그래머 용어'에 없다면 문제 영역에서 이름을 가져와도 괜찮다

 

의미있는 맥락을 추가하라

스스로 의미가 분명한 이름이 없지 않다

  • 접두어를 붙인다
    • firstName -> addrFirstName이라는 접두어를 통해 주소의 일부라는 사실을 분명히한다

 

불필요한 맥락을 없애라

애플리케이션 네임을 모든 클래스의 이름의 시작에 넣는 것은 바람직하지 않다

 


 

 

문헌

클린코드 - 로버트 C. 마틴

+ Recent posts