[Clean Code] 2장 의미있는 이름

유지수·2021년 9월 9일
0
post-thumbnail

의미있는 이름!
의도를 분명히 밝혀라
예시를 들어보면

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
}

이 얼마나 간단한가!!

나머지는 내일 쓰도록 하겠다 왜냐면 너무 졸리다

profile
IOS 개발자

0개의 댓글