2장 의미있는 이름

1 minute read

의도를 분명히 밝혀라

  • 함수명, 변수명은 의도를 분명하게 들어나야 함
public List<int[]> getThem() {
  List<int[]> list1 = new ArrayList<int[]>();
  for (int[] x : theList)
    if (x[0] == 4)

  list1.add(x);
  return list1;
}
  • 위 코드를 보았을 때 생기는 의문
  1. theList에 무엇이 들었는가?
  2. theList에서 0번째 값이 어째서 중요한가?
  3. 값 4는 무슨 의미인가?
  4. 함수가 반환하는 리스트 list1을 어떻게 사용하는가?
  • 아래와 같이 변경시 의도가 들어남
public List<int[]> getFlaggedCells() {
  List<int[]> flaggedCells = new ArrayList<int[]>();
  for (int[] cell : gameBoard)
    if (cell[STATUS_VALUE] == FLAGGED)

  flaggedCells.add(cell);
  return flaggedCells;
}

그릇된 정보를 피하라

  • 나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하지 말 것
    • accountList 의 형태가 List 가 아니라면 그릇된 정보를 제공할 수 있음
    • List가 아니라면 acountGroup 와 같은 이름 또는 account 로 명명하는 것이 좋음
  • 소문자 L과 대문자 O 사용시 주의할 것
int a = l;
if ( O == l )
  a = O1;
else
  l = 01;

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

  • MAX_CLASSES_PER_STUDENT는 grep으로 찾기가 쉽지만, 숫자 7은 검색이 어려움
  • 변수나 상수를 여러곳에서 사용한다면 검색하기 쉬운 이름을 써야 함
for (int j=0; j<34; j++) {
  s += (t[j]*4)/5;
}
int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for (int j=0; j < NUMBER_OF_TASKS; j++) {
  int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
  int realTaskWeeks = (realTaskDays / WORK_DAYS_PER_WEEK);
  sum += realTaskWeeks;
}
  • 위 두 코드는 같은 동작을 함
    • 코드는 위가 간결할 수 있으나, 코드의 의도를 파악하는 것은 아래의 코드가 더 좋음
    • 또한 특정 변수나 상수를 검색하기 용이함

클래스 이름

  • 클래스 이름과 객체 이름은 명사나 명사구가 적합함
    • Customer, WikiPage, Account, AddressParser 등이 좋은 예
    • Manager, Processor, Data, Info 등과 같은 단어는 피하고, 동사는 사용하지 않도록 해야함

메서드 이름

  • 메서드 이름은 동사나 동사구가 적합함
    • postPayment, deletePage, save 등이 좋은 예
    • 접근자, 변경자, 조건자는 get, set, is 를 붙이는 것이 좋음

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

  • 추상적인 개념 하나는 단어 하나만을 사용
    • 예시로 같은 메서드를 클래스마다 fetch, retrieve, get 등으로 각각 부르면 혼란스러움
    • 마찬가지로, 동일 코드 기반에 controller, manager, driver를 섞어 쓰면 혼란스러움

의미 있는 맥락을 추가하라

  • 클래스, 함수, 이름 공간에 의미를 넣어 맥락을 부여할 것
    • 예시 : firstName, lastName, street, houseNumber, city, state, zipcode
    • 같이 볼때는 주소라고 이해할 수 있지만, state 혼자만 있을떄는 의미를 알기 어려움
    • addr라는 접두어를 추가해 addrFirstName, addrLastName, addrState라 쓰면 맥락이 좀 더 분명해짐
    • Address 라는 클래스를 생성하는 방법도 있음

Leave a comment