달나라 노트

Google Apps Script : for loop (for 반복문) 본문

Google Apps Script

Google Apps Script : for loop (for 반복문)

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

 

 

 

Google Apps Script에서 for loop는 어떻게 사용할 수 있는지 알아봅시다.

 

Google Apps Script에서 for loop의 형태는 여러 가지가 있으니 상황에 따라 또는 본인의 취향에 따라 골라서 사용하면 됩니다.

 

 

Syntax

for (i in iterator) {
  ... do something ...
}

 

첫 번째 형태입니다.

보통의 for loop에서 많이 보이는 형태입니다.

(참고로 iterator는 list나 array처럼 여러 개의 데이터를 하나로 묶어서 각각의 요소를 하나씩 꺼내면서 반복이 가능한 type을 의미합니다.)

 

근데 한 가지 중요한 차이가 있습니다.

 

for ~ in loop에서는 array의 index를 i에 할당합니다.

array를 가지고 for loop를 돌리면 array값 자체가 아니라 array의 index를 0부터 i에 할당하여 for loop가 실행됩니다.

 

 

 

for (i of iterator) {
  ... do something ...
}

 

두 번째 형식은 첫 번째 형식과 비슷한데 in 대신 of를 사용합니다.

이것은 iterator에 속한 요소들을 i에 return합니다.

 

 

 

 

for (initialize; condition; increment;) {
  ... do something ...
}

 

마지막 for loop 형태입니다.

이것은 for loop의 반복 변수를 i라고 할 때

이 반복 변수의 초기값 (= initialize)

그리고 for loop를 실행시킬 조건 (= condition)

for loop 각각의 단계마다 실행할 반복 변수 증감 조건 (= increment)

이렇게 3개를 명시해주는 것입니다.

 

즉, 반복 변수 i는 초음에 initialize 값을 가지고 for loop가 실행되며 한 단계씩 지날 때 마다 increment에 명시된 증감 계산이 실행됩니다.

그리고 매 단계마다 for loop를 중단할지 계속 실행할지를 결정하는 기준은 condition이 true이면 for loop를 실행하고 condition이 false이면 for loop를 중단합니다.

 

좀 복잡한데 예시를 보면 알 수 있습니다.

 

 

 

 

 

function myFunction() {
  var arr_test = ['a', 'b', 30, 'c', 120];

  for (i in arr_test) {
    Logger.log(i);
  }
}



-- Result
0
1
2
3
4

 

먼저 for ~ in loop의 예시입니다.

 

arr_test는 분명히 ['a', 'b', 30, 'c', 120] 이것인데 i를 출력시켜보니 0, 1, 2, 3, 4가 출력되었습니다.

즉, for ~ in loop는 array의 요소가 아니라 index를 return하는 것입니다.

 

 

 

function myFunction() {
  var arr_test = ['a', 'b', 30, 'c', 120];

  for (i in arr_test) {
    Logger.log(arr_test[i]);
  }
}


-- Result
a
b
30.0
c
120.0

 

 만약 for ~ in loop에서 array에 요소에 접근하고 싶다면 위처럼 for loop 내부에서 indexing을 통해 접근해야 합니다.

 

 

 

 

 

function myFunction() {
  var animal = {
    'name': 'cat',
    'color': 'white',
    'age': 3
  };

  for (i in animal) {
    Logger.log(i);
  }
}


-- Result
name
color
age

 

array에서 for ~ in loop가 index를 iterator로 한다는 것은

for ~ in loop에서 dictionary를 쓴다면 위처럼 value값이 아닌 key값을 iterator로 쓰게 됩니다.

 

위 코드의 결과를 보면 animal에 존재하는 값의 pair 중 왼쪽에 있는 key값이 출력된 것을 볼 수 있습니다.

 

 

 

function myFunction() {
  var animal = {
    'name': 'cat',
    'color': 'white',
    'age': 3
  };

  for (i in animal) {
    Logger.log(animal[i]);
  }
}


-- Result
cat
white
3.0

 

만약 value값에 접근하고 싶다면 위처럼 animal[key]와 같은 방식을 통해 value값에 접근해야 합니다.

 

 

 

 

 

 

 

 

 

 

function myFunction() {
  var arr_test = ['a', 'b', 30, 'c', 120];
  
  for (i of arr_test) {
    Logger.log(i);
  }
}


-- Result
a
b
30.0
c
120.0

 

for ~ of loop 입니다.

이것은 array의 요소 그 자체를 반목문 대상으로 이용합니다.

따라서 별도의 indexing 없이 바로 array의 요소가 출력되는 것을 볼 수 있습니다.

 

 

 

 

 

 

 

 

function myFunction() {
  for (var i = 10; i <= 15; i = i + 1) {
    Logger.log(i);
  }
}


-- Result
10.0
11.0
12.0
13.0
14.0
15.0

 

마지막 for loop 형태입니다.

하나씩 해석해봅시다.

 

- for (var i = 10; i <= 15; i = i + 1)

가장 중요한 것은 이 부분이죠.

 

var i = 10; -> for loop의 반복 변수는 i라고 하고 첫 시작은 10으로 시작합니다.

 

i <= 15; -> 매 for loop 단계마다 이 조건을 테스트하여 이 조건이 true일 때에만 반복문을 실행합니다. 이 조건이 false가 되면 반복문을 종료합니다. (즉, 이 예시에선 i가 15 이하일 때 에만 반복문이 실행됩니다.)

 

i = i + 1; -> for loop가 한번 완료될 때 마다 i를 1씩 증가시킵니다.

 

따라서 출력된 것을 보면 10, 11, 12, 13, 14, 15입니다.

 

i의 첫 시작이 10이므로 가장 처음 출력된 값은 10입니다.

그리고 이것이 1씩 늘어나며 11, 12, 13, 14가 출력되고,

마지막 단계에서 i = 15일 때 i <= 15라는 기준이 true이므로 15도 출력됩니다.

 

근데 다음 단계에서 i가 1 더 증가하여 16이 되면 i <= 15라는 기준이 false가 되므로 반복문이 종료됩니다.

 

 

 

 

 

 

728x90
반응형
Comments