본문 바로가기
개발관련 서적 정리/CleanCode

02. 의미 있는 이름

by Backchus 2019. 8. 26.

어떤 프로젝트의 개발을 하다가 마치고 다음날 다시 그 코드를 봤을 때 시간이 지날수록 점점 더 코드를 다시 읽는 시간이 늘어갔고 점점 더 이해하기가 힘들어졌다. 그 원인들 중에 한 가지는 바로 변수나 함수를 구현할 때 아무렇게나 이름을 짰던 것이 그런 악순환을 불러왔던 것이다. 그래서 이름을 붙일 때는 정말 신중하게 붙여야 한다는 것을 깨달았다. 이름을 붙일 때 다음과 같은 방식을 참고하면서 네이밍을 신경 써야겠다.

1. 의도를 분명히 밝혀라

변수나 함수 그리고 클래스 이름은 다음과 같은 굵직한 질문에 모두 답해야 한다. 변수(혹은 함수나 클래스)의 존재 이유는? 수행 기능은? 사용 방법은? 

따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.

1
int d; // 경과 시간(단위: 날짜)
 

이름 d는 아무 의미가 없다. 경과 시간이나 날짜라는 느낌이 들도록 하는 이름이 필요하다.

1
2
3
4
int elapsedTimeInDays;
int daySinceCreation;
int daysSinceModification;
int fileAgeInDays;
 

의도가 드러나는 이름을 사용하면 코드 이해와 변경이 쉬워진다. 다음코드는 무엇을 할까?

1
2
3
4
5
6
7
8
9
public List<int[]> getThem() {
    List<int[]> list1 = new ArrayList<int[]>();
 
    for (int[] x : theList)
        if (x[0== 4)
            list1.add(x);
 
    return list1;
}
 
 

theList에 요소를 추출해 list1에 그 요소를 삽입한다는 로직만 알고 그 의도는 전혀 알 수가 없다.

1
2
3
4
5
6
7
8
9
public List<int[]> getFlaggedCells() {
    List<int[]> flaggedCells = new ArrayList<int[]>();
 
    for (int[] cell : gameBoard)
        if (cell[STATUS_VALUE] == FLAGGED)
            flaggedCells.add(cell);
 
    return flaggedCells;
}
 

위에서 보듯, 코드의 단순성을 변하지 않았다. 하지만 코드는 더 명확해 졌다. 지뢰 찾기 게임이라는 것을 알 수 있다. 첫 번째 코드의 의도를 보면 배열에서 0번째 값은 칸 상태를 뜻한다. 값 4는 깃발이 꽂힌 상태를 가리킨다.

각 개념에 이름만 붙여도 코드가 상당히 나아진다.

1
2
3
4
5
6
7
8
9
public List<Cell> getFlaggedCells() {
    List<Cell> flaggedCells = new ArrayList<Cell>();
 
    for (Cell cell : gameBoard)
        if (cell.isFlagged())
            flaggedCells.add(cell);
 
    return flaggedCells;
}
 

 한걸을 더 나아가, int 배열을 사용하는 대신, 칸을 간단한 클래스로 만든다. isFlagged라는 좀더 명시적인 함수를 사용해 FLAGGED라는 상수를 감춘다. 

이렇게 이름만 고쳤는데도 함수가 하는 일을 하기 쉬워졌다. 바롸 이것이 좋은 이름이 주는 위력이다. 

2. 그릇된 정보를 피해라

  • 여러 계정을 그룹으로 묶을 때, 실제 List가 아니라면, accountList라 명명하지 않는다.
  • 일관성이 떨어지는 표기법은 그릇된 정보다.

3. 의미 있게 구분하라

  • 연속된 숫자를 덧붙이거나 불용어를 추가하는 방식은 적절하지 못하다. 이름이 달라야 한다면 의미도 달라져야 한다. ex) a1, a2, a3 같은 네이밍 X
  • Info나 Data는 의미가 불분명한 불용어다.
  • 읽는사람이 차이를 알도록 이름을 지어야한다.

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

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

6. 인코딩을 피하라

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

8. 클래스 이름에서는 동사는 사용하지 않는다.

9. 메서드 이름은 동사나 동사구가 적합하다.

10. 기발한 이름은 피하라

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

12. 말장난을 하지 마라

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

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

15. 의미 있는 맥락을 추가하라

16. 불필요한 맥락을 없애라

 참고도서 : http://www.yes24.com/Product/goods/11681152

 

Clean Code 클린 코드

애자일 소프트웨어의 혁명적인 패러다임을 제시하는 책이다. 저자 로버트 마틴은 오브젝트 멘토(Object Mentor)의 동료들과 힘을 모아 ‘개발하며’ 클린 코드를 만드는 최상의 애자일 기법을 정제하여『Clean Code 클린 코드』에 담았다. 아주 많은 코드를 읽고 그 코드의 무엇이 옳은지, 그른지 생각하며 전문가로서 자신이 지니는 가치를 돌아보기 위해 ...

www.yes24.com

 

'개발관련 서적 정리 > CleanCode' 카테고리의 다른 글

03. 함수  (0) 2020.01.15
01. 깨끗한 코드  (0) 2019.08.26