while 대신에 for를 쓰려다 된통 당한 일

글쓴이: Ch. (sftblw) , 2016년 10월 4일

한 변수가 null인지 계속 체크할 일이 있어, while을 쓰려다 어차피 순환 작업인지라, for로 문장을 바꿨다. 그런데 웬걸, 프로그램이 터졌는데 살펴보니 여기다.

이유는 단순했는데, 내 for문에는 변수가 둘 있었다는 점을 간과한 게 가장 컸다. 자세한 건 코드로.

TargetType target = null;
for (RefType cur = start; target == null; cur = cur.next) {
	target = cur.find("target");

	if (target == null) { doStuff; }
	// else break; // 없으면, target != null 이고 cur.next == null 일 때 에러 발생
}

상식적으로는 당연히 조건 변화문이 먼저 실행될테고, 이게 변수가 하나일 때때는 문제가 없다. 하지만, for문에서 사용하는 변수가 조건 확인문과 조건 변화문의 것이 다를 경우 이렇게 문제가 발생할 수 있을지도 모르니, 변수를 두 개 다르게 쓰게 될 시점엔 조심해야 할 것 같다.