[자바스크립트]label문, break문 그리고 continue문이 루프 반복문에서 어떻게 사용 되는가?
루프 반복문에서 label문, break문 그리고 continue문 활용하기.
>> 신기한 연구소 tiboy.
루프 반복문으로 for문, for..in문, for..of문, while문 그리고 do..while문에 대해
포스팅을 했습니다.
더 자세한 내용은 이전 포스팅을 참조하세요.
그런데, 이 반복문을 컨트롤 할 수 있는 추가 명령어들이 있답니다.
좀 더 편하고 효율적으로 사용할 수 있는 명령어들인데요.
label문, break문 그리고 continue문이 바로 반복문의 감초 역할을 하는 친구들입니다.
그럼 label문부터 같이 알아볼까요?
label문
기본 구문은 다음과 같답니다.
label :
실행문장;
label에 사용하는 값은 자바스크립트에서 사용하는 정해진 식별자가 아니고
내가 원하는 식별하기 편한 값을 사용하면 된답니다.
다음처럼요.
1
2
3
4
5
6
7
|
goPrint: {
console.log('a');
console.log('b');
break goPrint;
console.log('c');
}
console.log('d');
|
cs |
goPrint라는 label이름을 지정하고 콜론 : 으로 시작합니다.
블럭문으로 범위를 정합니다.
블럭문을 실행하다가 break goPrint를 만나면 해당 블럭문의 실행을 멈춘답니다.
어떤 의미인지 이해가 되었나요?
원하는 기능을 하는 명령어 모음을 블럭문으로 묶어주고 이름 label을 지정해서 컨트롤할 수 있게 된 겁니다.
다음 예를 보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
var firstWhile = true;
var secondWhile = true;
var i = 0, j;
oneWhile : while (firstWhile){
console.log(i);
i++;
j = 0;
twoWhile : while(secondWhile) {
console.log(j);
j++;
if (i == 2) break oneWhile;
if (j == 10) {
break twoWhile;
}
}
}
console.log('i ==>' + i + ', j ==>' + j + 'end');
|
cs |
onwWhile과 twoWhile 레이블명을 지정했네요.
oneWhile은 바로 뒤 while문을 범위로 가져갑니다.
twoWhile은 중간 while문을 범위로 가져갑니다.
oneWhile문은 twoWhile문을 포함하고 있네요.
oneWhile에서 i++를 실행합니다.
그럼 0이었던 i는 1이 됩니다.
두 번째 twoWhile에서 j++를 실행합니다.
그럼 0이었던 j는 1이 됩니다.
i가 2라면 oneWhile레이블을 벗어납니다.
j가 10이면 twoWhile레이블을 벗어나고 oneWhile로 이동합니다.
이유는 아직 oneWhile레이블이 살아있으니까요.
break문
이제 break문에 대해 알아볼건데요.
이미 break문을 위에서 사용했답니다.
1
2
3
|
if (j == 10) {
break twoWhile;
}
|
cs |
break문은 label이 있다면 해당 label을 종료하고 빠져나갑니다.
label문이 없으면 바로 위 for, while, do..while, switch문이 있다면 종료하고
다음 문장으로 이동하게 됩니다.
break문을 사용하는 방법은 다음과 같습니다.
break [label];
예를 들어볼게요.
1
2
3
|
while(true){
break;
}
|
cs |
while문의 조건이 true리터럴이라 무한루프인데
실행 구문이 바로 break로 while문을 종료하게 됩니다.
break label 예제는 위 label문 예제를 참고하세요.
continue문
continue문은 이해를 잘해야 합니다.
다음 예를 보고 설명하겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
for (var i = 0; i < 10; i++){
console.log("front value i ==>" + i);
if (i == 5) {
continue;
}
console.log("back value i ==>" + i);
}
...
front value i ==>4
test.js:594 back value i ==>4
test.js:588 front value i ==>5
test.js:588 front value i ==>6
test.js:594 back value i ==>6
...
|
cs |
i가 5면 continue;입니다.
그런데 결과를 보면 4, 4, 5, 6, 6으로 5는 한 번만 출력되었습니다.
front만 출력되고 if문 아래의 back은 출력되지 않았습니다.
즉, continue문을 만나면 더 이상 해당 조건 상태의 구문을 진행하지 않고
다음 조건으로 이동하게 된다는 의미겠네요.
label문이 있다면 continue [label]로 구현해서
continue문 뒤는 실행하지 않고 다시 label로 돌아가서 실행한다는 의미입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
var i = 0, j = 0;
lblFirst : while(true) {
if (i == 4) break lblFirst;
console.log(i)
i++;
if (i == 3) continue;
j=0;
lblSecond : while(true) {
console.log(j);
j++;
if (j == 4) continue lblSecond;
if (j == 8) continue lblFirst;
console.log(j);
}
console.log(i);
}
|
cs |
if (j == 4) continue lblSecond;
if (j == 8) continue lblFirst;
이 두 구문을 보면 j가 4면 lblSecond의 while문을 다시 실행하고
j가 8이면 lblFirst로 이동합니다.
지금까지 루프 반복문에서 감초처럼 사용하는
label, break 그리고 continue문에 대해 알아봤습니다.
자주 연습해서 실전에서 잘 활용해보길 바랍니다.
즐 코딩하세요.