의미 있는 이름

의도를 분명히 밝히라

  • 변수나 클래스 이름에 의도를 분명히 밝혀야 함
  • 이름에 주석이 필요하다면 의도를 분명하게 드러내지 못했다는 것을 의미

그릇된 정보를 피하라

  • 코드에 그릇된 단서를 남겨서는 안됨
  • 실제 List가 아닌데 accountList등의 이름을 붙혀서는 안됨
  • 흡사한 이름을 사용하지 않도록 주의
  • 유사한 개념은 유사한 표기법을 사용, 일관성이 떨어지는 표기법은 그릇된 정보

의미 있게 구분하라

  • 컴파일러를 통과할지라도 연속된 숫자나 불용어를 추가하는 것음 바람직하지 않음
  • getActiveAccount, getActiveAccounts, getActiveAccountInfo 와 같이 사용해서는 안됨, 읽는 사람이 차이를 알도록 이름을 지어야함

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

  • 사람들은 단어에 익숙, 좋은 단어선택은 효율성을 가져다줌
  • 프로그래밍은 사회할동이다, 토론등에서 이름이 사용됨

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

  • 문자하나로 이루어진 이름은 찾기 어려움

인코딩을 피하라

  • 이름에 인코딩할 정보는 아주 많음
  • 유혀이나 범위정보까지 인코딩에 넣으면 그만큼 해독을 하기 어려워짐

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

  • 똑똑한 프로그래머와 전문가 프로그래머 사이에 나타나는 차이점 중 하나는 전문가 프로그래머는 명료함이 최고라는 사실을 이해함

클래스 이름

  • 클래스 이름은 명사나 명사구가 적합

메서드 이름

  • 메서드 이름은 동사나 동사구가 적합

기발한 이름은 피하라

  • 재미난 이름보다는 명료한 이름을 선택하라

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

  • 추상적인 개념하나에 단어 하나를 선택해 이를 고수해야함

말장난을 하지 마라

  • 한 단어를 두 가지 목적으로 사용하지 마라
  • 여러개의 클래스에서 add라는 메서드가 있다고 가정
  • 두 개의 값을 더해 새로운 add로 사용하다가 list에 새로운 값을 추가하는 add를 작성시 일관성이 없어짐
  • 이경우 insert나 append라는 새로운 이름으로 사용해야함
  • 프로그래머는 최대한 이해하기 쉽게 코드를 작성해야함

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

  • 문제 영역의 도메인에서 이름을 가져오지 말고 기술 개념에서 가져와라
  • 기술 개념이란 알고리즘 이름, 패턴 이름, 수학 용어 등 기술에서 파생된 이름을 의미

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

  • 해법 영역에 적절한 용어가 없다면 도메인 영역에서 이름을 가져와라

의미 있는 맥락을 추가하라

  • 이름만으로는 불분명 할 때가 존재
  • 클래스, 함수. 이름 공간에 맥락을 부여해 분명하게 할 필요가 존재
  • 모든 방법이 실패하면 접두어를 붙힘
  • 아래의 예에서 첫 번째 케이를 보면 함수를 끝까지 읽어야 변수 3개가 통계 추측에 사용된다는 걸 알 수 있음
  • 함수를 쪼개고 클래스로 만들어 세 변수가 확실히 GuessStatisticsMessage(추측통계)에 사용된다는 걸 명시

문백이 불분명한 변수

private void printGuessStatistics(char candidate, int count) {
  String number;
  String verb;
  String pluralModifier;

  if (count == 0) {
    number = "no";
    verb = "are";
    pluralModifier = "s";
  } else if (count == 1) {
    number = "1";
    verb = "is";
    pluralModifier = "";
  } else {
    verb = "are";
    pluralModifier = "s";
  }

  String guessMessage = String.format(
    "There %s %s %s%s", verb, number, candidate, pluralmodifier
  );
  print(guessMessage);
}

문백이 분명한 변수

public class GuessStatisticsMessage {
  private String number;
  private String verb;
  private String pluralModifier;

  public String make(char candidate, int count) {
    createPluralDependentMessageParts(count);
    return String.format(
      "There %s %s %s%s", verb, number, candidate, pluralmodifier);
  }

  private void createPluralDependentMessageParts(int count) {
    if (count == 0) {
      thereAreNoLatters();
    } else if (count == 1) {
      thereIsOneLatter();
    } else {
      thereAreManyLetters(count);
    }
  }

  private void thereAreManyLetters(int count) {
    number = Integer.toString(count);
    verb = "are";
    pluralModifier = "s";
  }

  private void thereIsOneLatter () {
    number = "1";
    verb = "is";
    pluralModifier = "";
  }

  private void thereAreNoLatters() {
    number = "no";
    verb = "are";
    pluralModifier = "s";
  }
}

불필요한 맥락을 없애라

  • 고급 휘발유 충전소(Gas Station Deluxe)라는 애플리케이션을 작성할 때, 모든 클래스 이름이 GDG로 시작하는 것은 전혀 바람직하지 못함
  • 일반적으로 짧은 이름보다는 긴이름이 좋지만 이는 의미가 분명한 경우에 한함
  • 이름에 불필요한 맥락을 추가하지 않도록 주의해야함