의미 있는 이름

Tags
2장
 
파일, 변수, 함수, 클래스, 인수, 패키지 등 많은 곳에 이름을 붙인다.
이름을 잘 지으면 여러모로 편하다.
 

의도를 분명히 밝혀라

의도가 분명히 드러나도록 이름짓는 것은 정말 중요하다.
코드 이해와 변경이 쉬워진다.
⚠️
따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 뜻이다.
// bad 👎 int d; // 경과 시간 // good 👍 int elapsedTimeInDays int daysSinceCreation int daysInceModification int fileAgeInDays
 
// bad 👎 public List<int[]> getThem() { // Them이 뭔데? List<int[]> list1 = new ArrayList<int[]>(); for(int[] x : theList) // theList가 뭔데? if(x[0] == 4) // 0번째 값은 뭔데? 4는 뭔데? list1.add(cell); return list1; // 결국 list1은 뭔데? } // good 👍 public List<int[]> getFlaggedCells() { List<int[]> flaggedCells = new ArrayList<int[]>(); for(int[] cell : gameBoard) if(cell[STATUS_VALUE] == FLAGGED) flaggedCells.add(cell); return flaggedCells; } // more good 👍 public List<Cell> getFlaggedCells() { List<Cell> flaggedCells = new ArrayList<Cell>(); for(Cell cell : gameBoard) if(cell.isFlagged()) flaggedCells.add(cell); return flaggedCells; }
  • 좋은 네이밍은 주석을 달지 않더라도 코드가 이해되도록 한다.
 

그릇된 정보를 피하라

코드에 그릇된 단서를 남겨서는 안된다. 코드의 의미를 흐린다.
  • 널리 쓰이는 단어를 다른 의미로 사용하면 안된다.
    • 자칫 다른 의미로 받아들일 수 있기 때문이다.
    • hp를 빗변(hypotenuse)을 표현하는 것은 적절치 않다.
    • 단순한 배열에 List라는 이름을 붙이는 것은 적절치 않다.
      • Group, 복수형 s 등을 붙이도록 하자
  • 서로 흡사한 이름을 사용하지 않도록 주의한다.
  • 유사한 개념은 유사한 표기법으로 표현해야 한다.
    • 일광성이 떨어지는 표기법은 그릇된 정보다.
 

의미 있게 구분하라

  • 이름이 달라진다면 의미도 달라져야 한다.
  • 아무런 정보를 제공하지 못하는 이름은 의도를 표현할 수 없다.
     

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

    • 발음하기 어려운 이름은 동료와 토론을 어렵게 만든다.
    ( 대화의 본질에 집중하지 못하고, 이름에 포커스를 두게 되고, 이름의 뜻이 와닿지 않는다면 대화가 잘 이해되지 않는다 )
     

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

    단순한 숫자는 외우고 있지 않다면 검색하기 어렵다. 상수로 선언하고 이름으로 검색을 쉽게 하자.
    MAX_CLASSES_PER_STUDENT = 7 NUMBER_OF_TASKS = 34
     

    인코딩을 피하라

     

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

     

    클래스 이름 / 메서드 이름

    • 클래스 이름과 객체 이름 : 명사, 명사구로 명명
    • 메서드 이름 : 동사, 동사구로 명명
     

    기발한 이름은 피하라

    이름을 보고 단번에 이해할 수 없다면 잘못 지은 것이다.
    ex) 특정 유머에 기반하여 명명하였는데, 해당 유머를 모르는 사람은 이해할 수 없다.
     

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

    개념 하나에 단어 하나를 선택해 이를 고수해야 한다. ( 일관성이 중요하다! )
    ex) fetch, retrieve, get으로 제각각 부르면 혼란스럽고, 검색도 어렵게 한다.
     

    말장난을 하지 마라

    한 단어를 여러 목적으로 쓰지 마라
    다른 개념임에도 같은 단어를 쓰는 것은 말장난에 불과하다.
    // bad 👎 add // A와 B를 더함 add // 마지막에 요소를 추가함 // good 👍 add // A와 B를 더함 insert // 마지막에 요소를 추가함
     

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

     

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

    의미있는 맥락을 추가하라

    불필요한 맥락을 없애라

    상위요소에서 맥락이 표현되었다면, 하위 요소에는 해당 이름을 중복해서 쓰지 마라.
    과한 정보이며 가독성을 떨어트린다.