# ๋ฐ๋ณต๋ฌธ(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) ์์ฑ์ ์๋์ ๋ ์กฐ๊ฑด์ ๋ง์กฑํฉ๋๋ค.
- ๊ฐ์ฒด๊ฐ [Symbol.iterator] ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค.
- [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, ...)์ ๋ํด ๋ฐ๋ณตํฉ๋๋ค.