정의 및 사용 방법
break나 continue 문에는 실행 위치를 참조할 수 있는 레이블(label)을 함께 사용할 수 있습니다.
레이블 문은 이러한 레이블을 지정하는 문으로,
실행 위치에 해당하는 특정한 문(statement) 앞에 레이블로 사용할 식별자를 지정합니다.
레이블 문을 이해하기 위해서는 사전에 필요로 하는 지식이 있습니다.
- break와- continue문이 어떻게 작동하고, 어떤 상황에서 사용되는지 이해해야 합니다.
- break와- continue문에는 옵션(선택사항)으로 실행 위치를 참조할 수 있는 레이블(label)을 지정할 수 있다는 것을 알고 있어야 합니다.
사전에 필요로 하는 지식
- break와- continue문이 어떻게 작동하고, 어떤 상황에서 사용되는지 이해해야 합니다.
break 문
				현재 반복문 또는 블록 문의 수행을 중지하고, 흐름을 벗어나 프로그램 제어를 다음 문으로 이동하는 기능을 수행합니다.
continue 문
				현재 반복문의 수행을 중지하고 나머지 부분을 건너뛰어 다음 반복으로 이동해서 즉시 시작하는 기능을 수행합니다.
break와 continue 문의 공통점
				현재의 수행을 중지하고 이동한다는 공통점이 있습니다.
- break와- continue문에는 옵션(선택사항)으로 실행 위치를 참조할 수 있는 레이블(label)을 지정할 수 있다는 것을 알고 있어야 합니다.
실행 위치를 참조
실행 위치를 참조한다는 의미는 break나 continue 문이 현재의 수행을 중지하고 이동하는 위치를 지정한다는 의미입니다.
break와 continue 문의 서을 살펴보겠습니다.
break [label];continue [label];break와 continue 문의 구문은 둘 다 옵션(선택사항)으로 실행 위치를 참조할 수 있는 레이블(label)을 지정할 수 있습니다.
레이블 문은 이러한 레이블을 지정하는 문으로,
실행 위치에 해당하는 특정한 문(statement) 앞에 레이블로 사용할 식별자를 지정합니다.
레이블 문의 구문
label: // 레이블 문
  statement; // 실행 위치에 해당하는 특정한 문(statement) 레이블 문은 실행 위치에 해당하는 특정한 문(statement) 앞에 레이블로 사용할 식별자(label)를 지정합니다. 식별자는 식별자(label) 바로 뒤에 콜론(:)을 붙입니다. label: 형태입니다.
label
				자바스크립트에서 사용할 수 있는 식별자면 모두 가능합니다.
statement
				실행 위치에 해당하는 문(statement)입니다.
레이블 문의 범위
레이블을 참조하는 모든 break나 continue 문은 레이블로 레이블이 지정된 문 내에 포함되어야 합니다. 레이블을 문의 범위에서만 사용할 수 있는 변수로 생각하세요.
중첩되지 않은 외부의 문에 사용할 수 없습니다.
예제
레이블 문은 주로 중첩된 반복문과 함께 사용됩니다.
반복문에 레이블을 붙이고, break나 continue 문을 사용해 반복문의 어느 위치에서 작업을 멈추고 어느 위치에서 다시 수행할지를 알려줄 수 있습니다.
break 문에서 레이블 문
				/* 레이블 문을 사용하지 않은 경우 */
for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 3; j++) {
        if (i === 1 && j === 1) {
            break; // 가장 내부의 반복문만 종료합니다.
        }
        console.log(`i: ${i}, j: ${j}`);
    }
}
/*  출력 결과
    i: 0, j: 0
    i: 0, j: 1
    i: 0, j: 2
    i: 1, j: 0
    i: 2, j: 0
    i: 2, j: 1
    i: 2, j: 2
*/
/* 레이블 문을 사용한 경우 */
outerLoop: for (let k = 0; k < 3; k++) {
    for (let l = 0; l < 3; l++) {    
        if (k === 1 && l === 1) {
            break outerLoop; // outerLoop 레이블이 있는 반복문을 종료합니다.
        }
        console.log(`k: ${k}, l: ${l}`);
    }
}
/*  출력 결과
    k: 0, l: 0
    k: 0, l: 1
    k: 0, l: 2
    k: 1, l: 0
*/continue 문에서 레이블 문
				/* 레이블 문을 사용하지 않은 경우 */
for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 3; j++) {
        if (i === 1 && j === 1) {
            console.log("Skipping i: 1, j: 1");
            continue; // 현재 반복문의 다음 반복으로 이동합니다.
        }
        console.log(`i: ${i}, j: ${j}`);
    }
}
/*  출력 결과
    i: 0, j: 0
    i: 0, j: 1
    i: 0, j: 2
    i: 1, j: 0
    Skipping i: 1, j: 1
    i: 1, j: 2
    i: 2, j: 0
    i: 2, j: 1
    i: 2, j: 2
*/
/* 레이블 문을 사용한 경우 */
outerLoop: for (let k = 0; k < 3; k++) {
    for (let l = 0; l < 3; l++) {    
        if (k === 1 && l === 1) {
            console.log("Skipping k: 1, l: 1");
            continue outerLoop; // outerLoop 레이블이 있는 반복문으로 이동합니다.
        }
        console.log(`k: ${k}, l: ${l}`);
    }
}
/*  출력 결과
    k: 0, l: 0
    k: 0, l: 1
    k: 0, l: 2
    k: 1, l: 0
    Skipping k: 1, l: 1
    k: 2, l: 0
    k: 2, l: 1
    k: 2, l: 2
*/사용 이유
중첩된 반복문이나 조건문과 같이 중첩된 구조에서 레이블 문이 자주 사용됩니다.
레이블 문을 사용하여 코드의 실행 흐름을 명확하게 제어하는 것은 복잡한 알고리즘을 다루거나 특정 상황에서 루프를 중단하거나 건너뛸 때 유용합니다. 그러나 레이블 문은 코드의 가독성을 저하시킬 수 있으므로, 필요한 경우에만 신중하게 사용하는 것이 좋습니다.
주의할 점
블록에도 레이블을 사용할 수 있지만, 반복문이 아닌 레이블은 break 문만 사용할 수 있습니다.
myBlock: {
  console.log("블록 내부입니다.");
  break myBlock; // 레이블이 붙은 블록을 빠져나옵니다.
  console.log("이 부분은 실행되지 않습니다.");
}
console.log("블록 외부입니다.");
/*  출력:
    "블록 내부입니다."
    "블록 외부입니다"
*/break 문은 항상 자신이 참조하는 레이블 내에 중첩되어야 합니다.
중첩되지 않은 외부의 문에 사용할 수 없습니다.
myBlock: {
    console.log('1');
    break outerBlock; // SyntaxError: Undefined label 'outerBlock'
}
outerBlock: {
    console.log('2');
}
호환성
| 문 | 
								데스크탑 Chrome
								 | 
									데스크탑데스크탑 Edge
									 | 
								데스크탑 Firefox
								 | 
								Safari
								 | 
									Node.js
									 | 
|---|---|---|---|---|---|
| label | 1 | 12 | 1 | 1 | 0.10 | 
명세서
| 명세서 사양 | |
|---|---|
| label | ECMAScript Language Specification #sec-labelled-statements |