2023년 4월 19일 작성

Clean Code - 좋은 이름 짓기

좋은 이름을 지으려면 시간을 들여야 하지만, 좋은 이름으로 절약하는 시간이 훨씬 더 많습니다.

좋은 이름을 짓는 방법

  • 처음에 시간을 들여 좋은 이름을 지어 놓으면, 나중에 code를 읽을 때 많은 시간을 절약할 수 있습니다.

의도를 분명히 밝히기

  • code가 하는 일을 짐작하기 쉬운 이름을 짓습니다.

잘못된 정보 피하기

  • code에 의미를 흐리는 잘못된 단서를 남겨서는 안 됩니다.

  • 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해서는 안 됩니다.

  • 복수형과 ~List를 구분합니다.
    • ~List는 실제 List 자료형이 아니라면 잘못된 명명입니다.
    • 단지 묶기 위함이면 단어의 복수형을 사용합니다.
      • ~s, ~es, …
  • 일관성 있게 명명합니다.
    • 서로 비슷한 이름을 사용하지 않도록 주의합니다.
    • 유사한 개념은 유사한 표기법을 사용합니다.

의미 있게 구분하기

  • 연속적인 숫자를 피합니다.
    • 연속적인 숫자를 사용한 이름은 아무런 정보도 제공할 수 없습니다.
    • 예를 들어, a1, a2, a3, …, aN
  • 이름이 달라야 한다면 의미도 달라져야 합니다.

  • 불용어를 추가하지 않습니다.
    • 불용어는 의미가 불분명합니다.
      • 예를 들어, ~Info, ~Data, …
    • 불용어는 의미가 중복되게 합니다.
      • 예를 들어, 변수명에 variable이라는 단어를 붙이기.
      • 예를 들어, 표 이름에 table이라는 단어를 붙이기.

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

  • 발음하기 쉬운 이름이 두뇌가 처리하기 쉽습니다.
  • 발음하기 쉬운 이름이 토론하기 좋습니다.

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

  • 유지 보수할 때 검색 가능 여부가 큰 영향을 줍니다.
    • 예를 들어, log를 grep으로 검색하는 경우.

Encoding을 피하기

  • 유형이나 범위 정보까지 encoding에 넣으면, 그만큼 이름을 해독하기 어려워집니다.
    • 예를 들어, member 변수 접두어 m_~, type 접미어 ~String, …

일반적으로 통용될 수 있는 이름 사용하기

  • 명료하게 명명합니다.
  • code를 읽을 때 변수 이름을 자신이 아는 이름으로 변환하며 읽어야 한다면, 그 변수 이름은 바람직하지 않습니다.

Class 이름

  • class와 객체 이름은 명사, 명사구가 적합합니다.
  • 동사는 사용하지 않습니다.

Method 이름

  • method 이름은 동사, 동사구가 적합합니다.
  • 접근자(accessor), 변경자(mutator), 조건자(predicate)의 명명은 Java Bean 표준에 따릅니다.

Method 이름의 Java Bean 표준

종류 이름
접근자 get + 값
변경자 set + 값
조건자 is + 값

기발한 이름 피하기

  • 의도를 분명하고 솔직하게 표현합니다.

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

  • 추상적인 개념 하나에 단어 하나를 선택해 고수해야 합니다.
    • 일관성 있는 어휘를 사용해야 code를 이용하는 programmer가 편합니다.
  • 같은 개념에 다른 단어를 사용하면, 혼란스럽습니다.
    • 예를 들어, 똑같은 method를 class마다 fetch, retrieve, get으로 제각각 이름 짓기.

한 단어를 두 가지 목적으로 사용하지 않기

  • 맥락이 다르다면 다른 단어를 사용해야 합니다.
    • 일관성을 지키기 위해 같은 단어를 사용하는 규칙에 얽메여서는 안 됩니다.
    • 예를 들어, add & insert & append.

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

  • 문제 영역(domain)에서 가져온 이름을 사용하면 안 됩니다.
    • 같은 개념을 다른 이름으로 이해하던 사람들에게 혼동을 줄 수 있습니다.
  • 전산 용어, algorithm 이름, pattern 이름, 수학 용어 등을 사용하는 것이 좋습니다.
    • code의 독자는 programmer이기 때문입니다.

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

  • 적절한 programming 용어가 없다면 문제 영역에서 이름을 가져와서 사용할 수도 있습니다.
    • code를 보수하는 programmer가 분야 전문가에게 의미를 물어 파악할 수 있습니다.
  • 문제 영역 개념과 관련이 깊은 code라면 문제 영역에서 이름을 가져와야 합니다.

의미 있는 맥락을 추가하기

  • 스스로 의미가 분명하지 않은 이름이라면, class나 함수에 넣어 맥락을 부여합니다.
  • class나 함수에 넣을 수 없는 경우라면, 접두어를 붙여 맥락을 부여할 수 있습니다.

불필요한 맥락 없애기

  • 의미가 분명한 경우에 한해서 짧은 이름이 긴 이름보다 좋습니다.
  • 맥락이 충분히 보인다면, 맥락을 또 추가할 필요는 없습니다.

Reference

  • Clean Code (도서) - Robert C. Martin

목차