홈 › 초급 › 02 / 8

연산자와 제어문

섹션 7진행 0 / 8

5. 자주 하는 실수 (Tip)

❌ 실수 1: 조건문에 = (대입) 사용

java
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 누락

java
switch (level) {
    case 1:
        System.out.println("낮음");
    case 2:
        System.out.println("중간");      // level==1일 때도 출력됨
        break;
}

✅ 화살표 switch를 쓰면 구조적으로 불가능합니다.

java
switch (level) {
    case 1 -> System.out.println("낮음");
    case 2 -> System.out.println("중간");
}

❌ 실수 3: 향상된 for에서 요소 수정

java
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: <= 로 배열 끝 초과

java
for (int i = 0; i <= arr.length; i++) {
    System.out.println(arr[i]);      // 마지막에 ArrayIndexOutOfBoundsException
}

✅ i < arr.length. "0부터 시작, 미만으로 끝".

❌ 실수 5: &와 && 혼동으로 NPE

java
if (user != null & user.isActive()) { ... }    // & 는 양쪽 다 평가 → NPE

✅ &&를 씁니다. 조건문에서 &, |를 쓸 이유는 거의 없습니다.

❌ 실수 6: 실수(double)를 반복 조건에 사용

java
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 전달

java
String status = null;
switch (status) { ... }       // NullPointerException

옛 switch는 null을 받으면 즉시 NPE입니다.

✅ 미리 null 검사하거나, JDK 21 switch에서는 case null ->을 추가합니다.