tevelop RSS 태그 관리 글쓰기 방명록
2022-12-26 22:19:42

이름은 어디에나 쓰인다. 변수, 함수, 인수, 클래스, 패키지, 소스 파일, 파일이 담긴 디렉터리 ... 등 수 많은 곳에 이름을 붙인다.

2장에서는 이름을 잘 짓는 간단한 규칙에 대한 내용.

 

의도를 분명히 밝혀라

변수나 함수 그리고 클래스의 이름은 다음과 같은 굵직한 질문에 모두 답해야한다.

변수(함수 / 클래스)의 존재 이유는? 수행 기능은? 사용 방법은?

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

d는 아무 의미도 드러나지 않는다. 측정하려는 값과 단위를 표현하는 이름이 필요하다.

int elapsedTimeInDays;
int daysSinceCreateion;
int daysSinceModification;
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. 함수가 반환하는 리스트1을 어떻게 사용하는가?

위의 사항들을 보충해서 수정한다면

public List<int[]> getFlaggedCells() {
	List<int[]> flaggedCells = new ArrayList<int[]>();
	for (int[] cell : gameBoard)
		if (cell[STATUS_VALUE] == FLAGGED)
			flaggedCells.add(cell);

	return flaggedCells;
}

이렇게 된다. 코드의 단순성은 변하지 않았음에도 불구하고 코드는 더욱 명확해졌다. 조금 더 명확히 하자면 int배열이 아닌 Cell을 간단한 클래스로 만드는것도 좋겠다.

그리고 isFlagged라는 좀 더 명시적인 함수를 사용해 FLAGGED라는 상수를 감춰도 좋겠다.

여기까지 개선하면

public List<Cell> getFlaggedCells() {
	List<Cell> flaggedCells = new ArrayList<Cell>();
	for (Cell cell : gameBoard)
		if (cell.isFlagged())
			flaggedCells.add(cell);

	return flaggedCells;
}

이런 코드가 나오겠다. 이름만 고쳤는데도 함수가 하는 일을 이해하기 쉬워졌다.

 

 

 

 

 

 

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

Clean Code - [ 1장 ] 깨끗한 코드  (2) 2021.08.26
tevelop. Designed by 코딩재개발.