달나라 노트

Google Apps Script : break, continue (반복문 중단, 반복문 스킵, 건너뛰기) 본문

Google Apps Script

Google Apps Script : break, continue (반복문 중단, 반복문 스킵, 건너뛰기)

CosmosProject 2022. 11. 22. 20:50
728x90
반응형

 

 

 

반목문을 원하는 시점에 중단하거나 특정 단계를 건너뛸 수 있게 하는 기능은 break, continue를 통해 가능합니다.

 

break는 실행되는 순간 break가 속해있는 반복문을 중단시키며

continue는 실행되는 순간 반복문의 해당 단계를 스킵하고 다음 단계로 넘어갑니다.

 

예시를 통해 알아봅시다.

 

 

function myFunction() {
  var arr_test = [10, 11, 12, 13, 14, 15];

  for (i of arr_test) {
    if (i == 13) {  // i == 13인 경우 if문 실행
      break;        // if문에는 break가 있고 break가 실행되는 순간 for loop 종료
    }
    Logger.log(i);
  }
}


-- Result
10.0
11.0
12.0

 

위 예시는 array를 interator로 하고 그것을 기준으로 반복문을 실행시켜 arr_test의 요소를 하나씩 출력해주는 코드입니다.

 

근데 결과를 보면 10, 11, 12 까지만 출력되고 13부터는 출력되지 않았습니다.

 

그 이유는 바로 if문에 있는 break 때문입니다.

i == 13일 때 if문이 실행되고 if문 안에 있는 break가 실행됩니다.

따라서 break는 for loop를 종료시키기 때문에 13부터는 출력되지 않은 것이죠.

 

 

 

 

 

 

 

 

이번엔 위에서 봤던 코드에서 break를 continue로 바꿔봅시다.

 

function myFunction() {
  var arr_test = [10, 11, 12, 13, 14, 15];

  for (i of arr_test) {
    if (i == 13) {  // i == 13일 때 if문 실행
      continue;     // continue가 실행되며 다음 단계로 넘어감. 따라서 13은 출력안됨.
    }
    Logger.log(i);
  }
}


-- Result
10.0
11.0
12.0
14.0
15.0

 

위 코드의 결과를 보면 10, 11, 12, 14, 15가 출력되었습니다.

arr_test에 있는 요소들이 다 출력되었는데 13만 출력되지 않았습니다.

 

그것은 바로 continue 때문입니다.

i == 13일 때 if문이 실행되고 if문 속의 continue도 실행됩니다.

따라서 13은 출력되지 못하고 다음 단계로 넘어가는 것이죠.

 

 

 

 

break와 continue의 기본적 기능과 비교까지 해보았습니다.

 

 

이제 break에 대해 좀 더 명확히 알아봅시다.

 

function myFunction() {
  var arr_test_1 = [10, 11, 12, 13];
  var arr_test_2 = ['a', 'b', 'c'];

  for (i of arr_test_1) {
    for (j of arr_test_2) {
      if (i == 11) {
        break;
      }

      Logger.log(`${i}, ${j}`);
    }
  }
}


-- Result
10, a
10, b
10, c
12, a
12, b
12, c
13, a
13, b
13, c

 

위 코드를 보면 2개의 array를 생성하고 for loop 속 for loop를 만들어 각각의 array 속 값을 출력해주는 코드입니다.

 

arr_test_1은 [10, 11, 12, 13]이고

arr_test_2는 ['a', 'b', 'c']입니다.

 

arr_test_1에는 11도 포함되어있는데 결과를 보면 어디에도 11은 없습니다.

 

이것은 break 때문입니다.

 

if문을 보면 i == 11일 때 break문을 실행하라고 되어있는데 중요한건 이 break가 실행되는 위치입니다.

break가 담겨있는 if문은 내부 for loop에 등록되어있습니다.

 

arr_test_1에서 i == 10일 때 arr_test_2가 속한 for loop가 돌면서 10, a / 10, b / 10, c를 출력합니다.

그러면 다시 i == 11이 되고 내부 for loop가 돌기 시작하는데 여기서 i == 11이라는 조건을 가진 조건문이 실행됩니다.

조건문은 break를 발동시키고 이 break는 자신이 속한 직접적인 for loop인 내부 for loop를 종료시킵니다.

즉, i == 11일 때의 내부 for loop는 돌지 않습니다.

 

다만 외부 for loop는 종료되지 않았으므로 i == 12, i == 13일 때의 loop는 정상적으로 돌게 됩니다.

 

이렇게 break는 기본적으로 자신이 속한 for loop만을 종료시키고, 자신이 속한 for loop보다 바깥에 있는 for loop에는 영향을 주지 않습니다.

 

 

 

 

 

 

 

근데 만약에 내부 for loop에서 어떤 조건을 만족할 때 외부 for loop까지 종료시키고 싶으면 어떻게 해야할까요?

 

이것은 for loop에 라벨을 붙이는 기능을 통해 해결할 수 있습니다.

 

function myFunction() {
  var arr_test_1 = [10, 11, 12, 13];
  var arr_test_2 = ['a', 'b', 'c'];

  my_for_loop:
  for (i of arr_test_1) {
    for (j of arr_test_2) {
      if (i == 11) {
        break my_for_loop;
      }

      Logger.log(`${i}, ${j}`);
    }
  }
}


-- Result
10, a
10, b
10, c

 

외부 for loop를 보면 my_for_loop: 라는 부분이 추가되었습니다.

이렇게 for loop가 시작되는 곳 바로 윗줄에 원하는 이름과 콜론(:)을 쓰면 바로 다음에 나올 for loop에 해당 이름을 부여한다는 의미가 됩니다.

즉, 지금 외부 for loop는 my_for_loop라는 이름을 얻게 된 것입니다.

 

그리고 내부 for loop에 있는 if문 속 break를 보시면

break 오른쪽에 my_for_loop가 적혀있습니다.

이렇게 break 오른쪽에 어떤 loop의 이름을 적어놓으면 그 이름을 가진 loop를 중단하라는 것입니다.

 

그래서 위 결과를 보면 i == 10일때의 결과 3개만 출력되고 그 이후로는 출력되지 않았습니다.

i == 11이 되었을 때 break my_for_loop;가 실행되어 외부 for loop를 중지시켰기 때문입니다.

 

 

 

이렇게 for loop에 대해 이름을 붙이고 그 이름을 break에 사용해서 break가 적용될 for loop를 직접 지정할 수 있는 기능을 알아보았습니다.

이렇게 반복문에 대한 네이밍과 그 이름을 사용해 반복문을 제어하는 기능은 continue에도 완전히 동일하게 사용될 수 있습니다.

 

 

 

 

 

 

728x90
반응형
Comments