의미있는 이름!
의도를 분명히 밝혀라
예시를 들어보면
int d; // 경과 시간(:단위 날짜)
이것보다
int elapsedTimeInDays;
int daysSinceCreation;
int daySinceModification;
int fileAgeInDays
이쪽이 훨씬 이해하기 쉽다는 거다
의도가 드러나는 이름을 사용하면 코드 이해와 변경도 쉬워진다
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. 반환하는 List는 어떻게 사용할것인가?
정답은 나는 아무것도 모른다!
각 개념에 이름만 붙으면 위 네개를 몰라도 나는 코드를 이해할수 있다.
public List<Int[]> getFlaggedCells(){
List<int[]> flaggedCells = newArrayList<int[]>();
for (int[] cell : gameboard)
if(cell[STATUS_VALUE] == FLAGGED)
flaggedCells.add(cell);
return flaggedCells;
}
이름 하나 붙였다고 지금 나는 이것이
1. 깃발을 꽂는 게임판
2. 깃발을 꽂은칸은 리턴한다
이라는 것을 깨달았다!
이름이 이렇게 중요하다 만약 이를 몰랐더라면 나는 멍청하게 어리바리 돌려보고 아~ 하고 있었겠지....
여기서 한걸음 더 나아가 int 배열을 사용하는 대신 칸을 간단한 클래스로 만들어도 될것같다. isFlagged라는 좀더 명시적인 함수를 사용해 FLAGGED라는 상수를 감춰보자!
public List<cell> getFlaggedCells(){
List<Cell> flaggedCells = new ArrayList<Cell>();
for (cell cell:gameboard)
if(cell.isFlagged())
flaggedCells.add(cell);
return flaggedCells
}
이 얼마나 간단한가!!
나머지는 내일 쓰도록 하겠다 왜냐면 너무 졸리다