[제어문] - 기타 제어문

Donggu(oo)·2022년 10월 26일
0

JavaScript

목록 보기
11/49
post-thumbnail

1. label 문


  • label 문은 식별자가 붙은 문을 말하며 프로그램의 실행 순서를 제어하는 데 사용한다.
  • switch문의 case문과 default 문도 레이블 문이다. 레이블 문을 탈출하려면 break 문에 레이블 식별자를 지정한다.

기본 문법

label: '식별하고자 하는 특정 영역'
// foo라는 레이블 식별자가 붙은 레이블 문
foo: {
    console.log(1);
    break foo;  // foo 레이블 블록문을 탈출한다.
    console.log(2);
}

console.log('Done!')

2. break 문


  • break 문은 label 문, 반복문(for, for ~ in, for ~ of, while, do ~ while) 또는 switch 문의 코드 블럭을 탈출한다.

기본 문법

1. break;
2. break '라벨 이름';
  • break 문은 반복문을 더 이상 진행하지 않아도 될 때 불필요한 반복을 회피할 수 있다.
// 문자열에서 특정 문자의 인덱스(위치)를 검색하는 예제
let string = 'Hello World';
let search = 'l';
let index;

for (let i = 0; i < string.length; i++) {
    if (string[i] === search) {
        index = i;
        break;  // string[2]에서 이미 l을 찾았으므로 더이상 반복문을 진행할 필요가 없다.
    }
}

console.log(index);  // 2
  • 중첩된 for 문의 내부 for 문에서 break 문을 실행하면 내부 for 문을 탈출하여 외부 for 문으로 진입한다. 이때 내부 for 문이 아닌 외부 for 문을 탈출하려면 레이블 문을 사용해야 한다.

  • 아래 예제는 break문이 있는 if문으로 부터 가장 가까운 for문인 for (let j = 2; j < arr[i]; j++) {} 을 탈출해서 for (let i = 0; i < arr.length; i++) {} 문을 다시 실행한다.

// arr = [1, 2, 4, 5, 10, 20]
function solution(arr) {
    let result = [];
    let prime = true;

    for (let i = 0; i < arr.length; i++) {
        for (let j = 2; j < arr[i]; j++) {
            if (arr[i] % j === 0) {
                prime = false;
              // arr[i]가 10이고 j는 2부터 9까지 들어오게 되는데, j가 2일때 바로 if문의 조건을
              // 만족하므로 prime을 false로 바꾸고 j 반복문을 탈출하여 i 반복문 부터 다시 실해하게 된다.
                break;
            }
        }
        if (prime) {
            result.push(arr[i])
        }
    }
    return result
}
  • 중첩된 for문의 제일 바깥에 있는 for문도 탈출하고 싶다면 레이블 문을 사용한다. 레이블 문은 break문 오른쪽에 레이블명을 작성하고, 한번에 빠져나오고자 하는 반복문의 앞에 레이블명: 의 형식으로 레이블을 붙여주면 레이블 명이 붙어있는 반복문 밖으로 한번에 빠져나온다.

  • 그러나 레이블 문은 중첩된 for 문 외부로 탈출할 때는 유용하지만 그 밖의 경우에 레이블 문을 사용하게 되면 프로그램의 흐름이 복잡해져서 가독성이 떨어지고 오류를 발생시킬 가능성이 높아 사용을 권장하지 않는다.

// outer라는 식별자가 붙은 레이블 for 문
outer: for (let i = 1; i < 3; i++) {
    for (let j = 1; j < 3; j++) {
        if (i + j === 3) {
            break outer;
            console.log(`inner [${i}, ${j}]`)
        }
    }
}

console.log('Done!')  // Done!
  • break 문을 switch 문에서 사용할 경우 break 문에 레이블 식별자를 지정하지 않는다.

  • label 문, 반복문, switch 문의 코드 블럭 외에 break 문을 사용하면 SyntaxError가 발생한다.

if (true) {
  break;  // SyntaxError: Illegal break statement
};

3. continue 문


  • continue 문은 반복문의 코드 블럭 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다.
  • break 문처럼 반복문을 탈출하지는 않는다.

기본 문법

1. continue;
2. continue '라벨 이름';
// 문자열에서 특정 문자의 개수를 세는 예제
let string = 'Hello World';
let search = 'l';
let count = 0;

// 문자열은 유사 배열이므로 for 문으로 순회할 수 있다.
for (let i = 0; i < string.length; i++) {
    // l'이 아니면 현 지점에서 실행을 중단하고 반복문의 증감식으로 이동한다.
    if (string[i] !== search) {
        continue;
    } else {
        count++;  // continue 문이 실행되면 이 문은 실행되지 않는다.
    }
}

console.log(count);  // 3

0개의 댓글