break 문의 탈출 범위는 while, for, switch, do while 이다. 아래 코드를 보자
for (int b = 0; b < 200; b++) {
for (int i = 0; i < 10; i++) {
if (i == 5) {
System.out.println("break 실행");
break;
}
System.out.println("i = " + i);
}
System.out.println("b = " + b);
}
이 코드를 실행해보자. 착각했던것이 i 가 5일때 if 안의 break 문으로 인해 if 만 탈출하는걸로 착각하였다 아니다. break 문이 있으면 무조건 if 밖의 while, for, switch, do while 을 기준으로 가장 가까운 반복문의 탈출을 시도한다. 그러나 탈출의 한계는 반복문 1단계 뿐이다. 위 코드와 같이 이중 for 문일경우 가장 바깥쪽의 for문에는 영향을 받지 않는다.
그렇다면 이중 반복문을 완전히 빠져나가고 싶다면 어떻게 할까? 아니면 n의 반복문을 빠져나가고 싶다면?
outerLoop :
for (int b = 0; b < 200; b++) {
for (int i = 0; i < 10; i++) {
if (i == 5) {
System.out.println("break 실행");
break outerLoop;
}
System.out.println("i = " + i);
}
System.out.println("b = " + b);
}
위의 코드와 같이 빠져 나갈반복문의 윗쪽에 outerLoop : 명시해주고 break outerLoop; 라고 써준다. 그리하면 break outerLoop; 를 만나고 outerLoop : 아랫쪽에 있는 반복문을 완전히 빠져 나오게 된다. 즉 무시 되어진다. 기존 C언어에서 goto 와 유사하다. goto 문은 권장되어지지 않는 문이다.
필요에 의해 outerLoop 를 쓰겠지만. 권장되어지진 않는다