반응형

루프 반복문에서  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 == 2break 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 == 4break lblFirst;
    console.log(i)
    i++;    
    if (i == 3continue;
    j=0;
    lblSecond : while(true) {
        console.log(j);
        j++;
        if (j == 4continue lblSecond;     
        if (j == 8continue 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문에 대해 알아봤습니다.

자주 연습해서 실전에서 잘 활용해보길 바랍니다.
즐 코딩하세요.

반응형