의도를 분명히 밝혀라

변수, 함수, 인수, 클래스, 패키지 등등 소프트웨어에서 이름은 어디나 쓰인다.

그러니 좋은 이름을 지어야 한다.

좋은 이름이란 의도를 분명히 밝히는 것.

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

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<int[]> getFlaggedCells() {
    List<int[]> flaggedCells = new ArrayList<int[]>();
    for (int[] cell: gameBoard)
        if (cell[STATUS_VALUE] == FLAGGED)
            flaggedCells.add(cell);
    return flaggedCells;
}

위 두 코드는 같은 동작을 하는 코드이지만 첫 번째 코드는 너무나 함축되어 있어 코드 맥락이 코드 자체에 명시적으로 드러나지 않는다.

위 코드가 지뢰찾기 게임이라고 할 때 다음과 같이 int 배열을 간단한 클래스로 만들어서 의미를 부여해도 좋다.

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

그릇된 정보를 피하라