본문 바로가기

독서

[클린코드] 의미 있는 이름

의도를 분명히 밝혀라

  • 의도가 드러나는 이름을 사용하면 코드 이해와 변경이 쉬워진다.
  • 코드가 단순한게 문제가 아니다. 코드를 통해 명확히 어떤 의도로 사용되는 것인지 짐작할 수 있어야 한다.

그릇된 정보를 피해라

  • 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하면 안된다.
  • 서로 흡사한 이름을 사용하지 않도록 주의해야 한다.
    • 유사한 개념은 유사한 표기법을 사용한다.
  • 알파벳 "O", "l" 처럼 숫자와 혼동될 수 있는 변수 명을 주의해서 사용해야 한다.

의미 있게 구분하라

  • 불용어를 추가한 이름은 아무런 정보도 제공하지 못한다.
    • Product라는 클래스가 있을 때, 다른 클래스를 ProductInfo, ProductData로 사용한다면 의미가 불분명한 정보라 이해하기 쉽지 않다.
    • 불용어 : 문장 내에서 빈번하게 발생하여 의미를 부여하기 어려운 단어
      • a, an, the
  • 다음과 같은 단어는 피하는게 좋다.
    • variable, table, ~String, ~Object
  • 변수에 불용어가 존재했을 때, 만약 불용어를 제거한 변수와 불용어가 붙어있는 변수를 서로 구분하지 못하겠다면 잘못된 변수명을 사용한 것이다.

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

  • 발음하기 어려운 이름은, 팀원과 회의나 프로젝트에 대해 대화를 할 때 비효율적일 수 있다.
  • 줄임말을 사용하는 것도 같은 이치로 사용을 피하는게 좋다.

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

  • e, a와 같은 단어를 이름이나 상수로 사용하면 검색하기 쉽지 않다. 거의 모든 곳에서 사용되고 있기 때문이다.
  • 긴 이름이 짧은 이름보다 좋다.
  • 이름 길이는 범위 크기에 비례해야 한다.
    • 변수나 상수를 코드 여러 곳에서 사용한다면 검색하기 쉬운 이름이 바람직하다.
  • 1, 2와 같은 숫자를 그냥 사용하는 것보다 변수에 할당하고 의미있는 이름을 지정해주는 것이 좋다.

클래스 이름

  • 명사나 명사구가 적합하다.
    • Customer, Account
  • 불용구는 피하는게 좋다.
    • ~~Manager, ~~Data, ~~Info
  • 동사는 사용하지 않는다.

메서드 이름

  • 동사나 동사구가 적합하다.
    • save, deletePage
  • 접근자, 수정자, 조건자는 get, set, is를 붙인다.
  • 생성자를 중복정의할 때는 정적 팩토리 메서드를 사용한다. 이때, 메서드는 인수를 설명하는 이름을 사용한다.

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

  • 추상적인 개념 하나에 단어 하나를 선택해서 사용한다.
  • 또한, 한 단어를 두 가지 목적으로 사용하지 마라
    • 기존에 값을 더하는 메소드에 add를 사용했다. 근데 리스트에 값을 추가하는 메소드에도 add라는 이름을 사용한다면, 이는 코드를 이해하는데 어려움을 줄 수 있다.

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

  • 코드를 읽는 사람도 프로그래머이기 때문에 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 괜찮다.

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

  • 적절한 프로그래머 용어가 없다면 문제 영역에서 이름을 가져온다.
    • 문제 영역은 개발하려는 서비스 도메인을 의미하는 것 같다.