[클린코드] 2장. 의미 있는 이름
코드에서 이름을 잘 짓는 간단한 몇 가지 규칙들
- 의도를 분명히 밝혀라
변수, 함수, 클래스 이름은 다음의 질문에 답할 수 있어야 한다.
-> 존재 이유는? 수행 기능은? 사용 방법은?
int d; // 경과 시간(단위 날짜)
=> int elapsedTimeInDays; 와 같이 의도가 드러나는 이름을 사용해야 한다.
public List<int[]> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x : theList)
if (x[0] == 4)
list1.add(x);
return list1;
}
코드가 무슨 일을 하는지 짐작하기 어려운 코드
public List<Cell> getFlaggedCells() {
List<Cell> flaggedCells = new ArrayList<Cell>();
for (Cell cell : gameBoard)
if (cell.isFlagged())
flaggedCells.add(cell);
return flaggedCells;
}
코드가 무슨 일을 하는지 이해할 수 있는 코드
위의 두 코드의 차이는 '함축성' 이다
아무리 단순한 코드일지라도, 변수/함수/클래스의 이름이 명확하지 않다면 코드를 이해할 수 없다.
이와 같이 명시적인 변수명과 함수명, 클래스명은 코드가 의미하는 바를 더욱 명확하게 해준다.
- 그릇된 정보를 피하라
변수,함수,클래스명은 일관성 있게 작성되어야 한다.
널리 쓰이는 의미가 있는 단어를 다른 의미로 사용 하면 안된다.
오해를 불러 일으킬 수 있는 '정보', 즉 그릇된 정보를 피해야 한다.
- 의미 있게 구분하라
의미가 불분명한 불용어는 이름으로 적당하지 않다.
CustomerInfo 와 Customer 클래스가 존재할 때, 두개의 클래스는 이름만으로는 구분할 수 없다.
따라서 읽는 사람이 차이를 알도록 이름을 지어 의미 있게 구분할 수 있도록 해야 한다.
- 발음하기 쉬운 이름을 사용하라
- 검색하기 쉬운 이름을 사용하라
- 클래스 이름
클래스 이름은 명사나 명사구가 적합하다.
의미가 불분명한 Manager, Processor, Data, Info 등의 단어는 피해야 한다.
동사 또한 사용하지 않는다.
- 메서드 이름
메서드 이름은 동사나 동사구가 적합하다.
deletePage, postPayment 등
- 한 개념에 한 단어를 사용해라
일관성 있는 어휘를 사용해야 한다.
똑같은 메서드를 클래스마다 fetch, retrieve, get 등 제각각으로 부르면 혼란 스럽다.
- 의미 있는 맥락을 추가하라
의미를 분명하게 할 수 있는 접두어를 추가해주는 것도 방법.
- 불필요한 맥락을 없애라
의미가 분명한 경우에 핸해서는 짧은 이름이 긴 이름보다 좋다.
따라서 이름에 불필요한 맥락을 추가 하지 않도록 하여야 한다.
* 변수 이름 짓기에 참고할 수 있는 사이트