연산자와 제어문
5. 자주 하는 실수 (Tip)
❌ 실수 1: 조건문에 = (대입) 사용
boolean done = false;
if (done = true) { // 대입! 항상 true
...
}자바는 boolean 대입만 조건에 허용해서 다행히 if (count = 5)는 컴파일 오류가 나지만, boolean 변수에는 이 실수가 통과합니다.
✅ if (done) 또는 if (done == true). boolean은 그냥 if (done), if (!done)으로 씁니다.
❌ 실수 2: switch 구문에서 break 누락
switch (level) {
case 1:
System.out.println("낮음");
case 2:
System.out.println("중간"); // level==1일 때도 출력됨
break;
}✅ 화살표 switch를 쓰면 구조적으로 불가능합니다.
switch (level) {
case 1 -> System.out.println("낮음");
case 2 -> System.out.println("중간");
}❌ 실수 3: 향상된 for에서 요소 수정
int[] prices = {1000, 2000};
for (int p : prices) {
p = p * 2; // p는 복사본. 배열은 그대로
}
System.out.println(prices[0]); // 1000✅ 인덱스 for를 씁니다: for (int i = 0; i < prices.length; i++) prices[i] *= 2;
❌ 실수 4: <= 로 배열 끝 초과
for (int i = 0; i <= arr.length; i++) {
System.out.println(arr[i]); // 마지막에 ArrayIndexOutOfBoundsException
}✅ i < arr.length. "0부터 시작, 미만으로 끝".
❌ 실수 5: &와 && 혼동으로 NPE
if (user != null & user.isActive()) { ... } // & 는 양쪽 다 평가 → NPE✅ &&를 씁니다. 조건문에서 &, |를 쓸 이유는 거의 없습니다.
❌ 실수 6: 실수(double)를 반복 조건에 사용
for (double d = 0.0; d != 1.0; d += 0.1) { ... } // 무한루프. 0.1을 10번 더해도 정확히 1.0이 안 됨✅ 정수로 반복하고 필요할 때 나눕니다: for (int i = 0; i <= 10; i++) { double d = i / 10.0; }
❌ 실수 7: 문자열 switch에 null 전달
String status = null;
switch (status) { ... } // NullPointerException옛 switch는 null을 받으면 즉시 NPE입니다.
✅ 미리 null 검사하거나, JDK 21 switch에서는 case null ->을 추가합니다.