# ๋ฐ˜๋ณต๋ฌธ(Loop)

๋ฐ˜๋ณต๋ฌธ์€ ํŠน์ • ๋กœ์ง์„ ๋ฐ˜๋ณตํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ํ™œ์šฉ๋˜๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์ „ํ˜•์ ์ธ for ๋ฐ˜๋ณต๋ฌธ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

for (var i = 0; i < 10; i++) {
  console.log(i); // 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ถœ๋ ฅ
}

์•ž์—์„œ ์‚ดํŽด๋ณธ for ๋ฐ˜๋ณต๋ฌธ์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

for (๋ฐ˜๋ณตํ•  ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”, ๋ฐ˜๋ณต ์กฐ๊ฑด, ๋ฐ˜๋ณตํ•  ๋ณ€์ˆ˜์˜ ์ฆ๊ฐ์‹) {
  // ๋ฐ˜๋ณตํ•  ์—ฐ์‚ฐ
}

# ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐ˜๋ณต๋ฌธ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋„ ์œ„์™€ ๊ฐ™์€ ๋ฐ˜๋ณต๋ฌธ์„ ๋งŽ์ด ์‚ฌ์šฉํ• ๊นŒ์š”? ์ •๋‹ต์€ No์ž…๋‹ˆ๋‹ค. ์ตœ์ ์˜ ์„ฑ๋Šฅ ํŠœ๋‹์„ ์œ„ํ•ด์„œ ๊ณ ์˜๋กœ ์ผ๋ฐ˜ for๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ˜๋ณต๋ฌธ์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • forEach ๋ฐ˜๋ณต๋ฌธ
  • for in ๋ฐ˜๋ณต๋ฌธ
  • for of ๋ฐ˜๋ณต๋ฌธ

๊ทธ๋Ÿผ ์œ„์˜ ๋ฌธ๋ฒ•๋“ค์„ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

# forEach()

forEach ๋ฐ˜๋ณต๋ฌธ์€ ๋ฐฐ์—ด์— ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ๋ฐ˜๋ณต๋ฌธ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

var arr = [10, 20, 30];
arr.forEach(function(value, index) {
  console.log('array index: ' + index + ' value : ' + value);
});

์œ„ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

array index: 0 value : 10
array index: 1 value : 20
array index: 2 value : 30

# for in

for in ๋ฐ˜๋ณต๋ฌธ์€ ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด์— ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ณต๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ทฐ์˜ v-for ๋””๋ ‰ํ‹ฐ๋ธŒ์˜ ๋ชจํ‹ฐ๋ธŒ๊ฐ€ ๋˜๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค.

var arr = [10, 20, 30];
var obj = {
  num: 10,
  str: 'hi',
  arr: [],
};

์œ„ ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด๋ฅผ for in ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ 1๊ฐœ์”ฉ ์ ‘๊ทผํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆœํšŒํ•˜๋Š” ๊ฒฝ์šฐ
for (var key in arr) {
  console.log(arr[key]);
}

// ๊ฐ์ฒด์˜ ํ‚ค๋ฅผ 1๊ฐœ์”ฉ ์ ‘๊ทผํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆœํšŒํ•˜๋Š” ๊ฒฝ์šฐ
for (var key in obj) {
  console.log(obj[key]);
}

๊ฐ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// ๋ฐฐ์—ด ๋ฐ˜๋ณต๋ฌธ์˜ ์ฝ˜์†”
10
20
30

// ๊ฐ์ฒด ๋ฐ˜๋ณต๋ฌธ์˜ ์ฝ˜์†”
10
hi
[]

# for of

for of ๋ฐ˜๋ณต๋ฌธ์€ ES6์— ์ถ”๊ฐ€๋œ ๊ตฌ๋ฌธ์œผ๋กœ์„œ, ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ(iterable) ์†์„ฑ์„ ๊ฐ€์ง€๋Š” ์ปฌ๋ ‰์…˜์— ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ๋ฐ˜๋ณต๋ฌธ์ž…๋‹ˆ๋‹ค.

TIP

๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ(iterable) ์†์„ฑ์€ ์•„๋ž˜์˜ ๋‘ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ฐ์ฒด๊ฐ€ [Symbol.iterator] ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. [Symbol.iterator] ๋ฉ”์„œ๋“œ๋Š” iterator ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ๊ฐ์ฒด์— ๋Œ€ํ•œ for of ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์—๋Ÿฌ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var obj = {
    num: 10,
    str: 'hi',
    arr: [],
}

for (var prop of obj) {
    console.log(prop, obj[prop]); 
}

์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Uncaught TypeError: obj is not iterable

TIP

๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ฐ˜๋ณต๋ฌธ ์ ‘๊ทผ ์—๋Ÿฌ์— ๋Œ€ํ•ด์„œ๋Š” ์ด ์ž๋ฃŒ (opens new window)๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# for of vs for in

์•„๋ž˜์˜ ์˜ˆ์‹œ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด for in ๋ฐ˜๋ณต๋ฌธ๊ณผ for of ๋ฐ˜๋ณต๋ฌธ์„ ๋น„๊ตํ•˜๋ฉด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

var arr = [10,20,30]

์œ„ ๋ฐฐ์—ด์„ ๊ฐ๊ฐ for of์™€ for in ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// ๋ฐฐ์—ด์„ ๊ฐ๊ฐ ์ˆœํšŒํ•˜๋Š” ๊ฒฝ์šฐ
for (var num of arr) {
    console.log(num); 
}
for (var num in arr) {
    console.log(num); 
}

๊ฐ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// ๋ฐฐ์—ด์„ ๊ฐ๊ฐ ์ˆœํšŒํ•˜๋Š” ๊ฒฝ์šฐ
// for of ๋ฐ˜๋ณต๋ฌธ์˜ ์ฝ˜์†”
10 20 30 

// for in ๋ฐ˜๋ณต๋ฌธ์˜ ์ฝ˜์†”
0 1 2

์•ž์„œ ์‚ดํŽด๋ณธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด for in์ด ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ˜๋ฉด for of๋Š” ๋ฐฐ์—ด์˜ ๊ฐ’ ์ž์ฒด์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. for in์€ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ˆœํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐฐ์—ด์˜ ์†์„ฑ์ด์ž key์— ํ•ด๋‹นํ•˜๋Š” index๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์ˆœํšŒํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด for of๋Š” ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์—, data๋ฅผ ์ง์ ‘ ์ˆœํšŒํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

TIP

for in VS for of

  • for in : ๊ฐ์ฒด์˜ ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•œ ์†์„ฑ์— ๋Œ€ํ•ด ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
  • for of : ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ์†์„ฑ์„ ๊ฐ€์ง€๋Š” ์ปฌ๋ ‰์…˜(Arrays, Objects, Map, ...)์— ๋Œ€ํ•ด ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.