JavaScript์์ for...of ๋ฌธ์ ๋ฐฐ์ด, ๋ฌธ์์ด, ๋งต(Map), ์
(Set) ๋ฑ๊ณผ ๊ฐ์ ์ดํฐ๋ฌ๋ธ(iterable) ๊ฐ์ฒด์ ์์๋ฅผ ์ํํ ๋ ์ฌ์ฉํ๋ ๋ฐ๋ณต๋ฌธ์
๋๋ค. for...of
๋ฌธ์ ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด์ ๊ฐ์ ์์ฐจ์ ์ผ๋ก ๊ฐ์ ธ์ค๋ฏ๋ก, ๋ฐฐ์ด์ด๋ ๋ฌธ์์ด ๋ฑ์ ๋ค๋ฃฐ ๋ ๋งค์ฐ ๊ฐํธํ๊ณ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฒ ๊ธ์์๋ JavaScript์ for...of ๋ฌธ ์ฌ์ฉ๋ฒ๊ณผ ๋ค์ํ ํ์ฉ ์์๋ฅผ ํตํด ๊ทธ ๊ธฐ๋ฅ์ ์์๋ณด๊ฒ ์ต๋๋ค.
JavaScript for...of ๋ฌธ์ด๋?
for...of
๋ฌธ์ ๋ฐฐ์ด, ๋ฌธ์์ด, ๋งต(Map), ์
(Set)๊ณผ ๊ฐ์ ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด์ ๊ฐ์ ์์ฐจ์ ์ผ๋ก ๊ฐ์ ธ์ ๋ฐ๋ณตํ ์ ์๋ ๊ตฌ์กฐ์
๋๋ค. for...in
๋ฌธ์ด ๊ฐ์ฒด์ ์์ฑ(ํค)์ ์ํํ๋ ๋ฐ๋ฉด, for...of
๋ ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด์ ๊ฐ ์์ฒด๋ฅผ ์ํํฉ๋๋ค. ๋ฐ๋ผ์, ๋ฐฐ์ด ์์๋ ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
for...of ๋ฌธ ๊ธฐ๋ณธ ๊ตฌ์กฐ
for (๋ณ์ of ์ดํฐ๋ฌ๋ธ) {
// ๋ฐ๋ณต ์คํํ ์ฝ๋
}
๋ฃจํ๊ฐ ์์๋๋ฉด ๋ณ์
์ ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด์ ๊ฐ ๊ฐ์ด ์์ฐจ์ ์ผ๋ก ํ ๋น๋๋ฉฐ, ํด๋น ๊ฐ์ ๋ํด ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค.
for...of ๋ฌธ ์์
// ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ํํ๋ ์์
const fruits = ['์ฌ๊ณผ', '๋ฐ๋๋', '๋ธ๊ธฐ'];
for (const fruit of fruits) {
console.log(fruit);
}
์ ์ฝ๋์์๋ ๋ฐฐ์ด fruits
์ ๊ฐ ์์๊ฐ for...of
๋ฌธ์ ํตํด ์ํ๋๋ฉฐ ์ถ๋ ฅ๋ฉ๋๋ค. fruit
๋ณ์๋ ๋งค๋ฒ ๋ฐฐ์ด์ ๋ค์ ๊ฐ์ ๊ฐ๋ฆฌํต๋๋ค. ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
์ฌ๊ณผ
๋ฐ๋๋
๋ธ๊ธฐ
์ด์ฒ๋ผ for...of
๋ฌธ์ ๋ฐฐ์ด์ ๊ฐ ์์์ ๊ฐํธํ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋๋ค.
for...of ๋ฌธ๊ณผ ๋ค์ํ ์ดํฐ๋ฌ๋ธ
for...of
๋ฌธ์ ๋ฐฐ์ด๋ฟ๋ง ์๋๋ผ ๋ค์ํ ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด๋ ๋ฐฐ์ด ์ธ์๋ ๋ฌธ์์ด, ๋งต(Map), ์
(Set) ๋ฑ์ด ํฌํจ๋ฉ๋๋ค. ๊ฐ๊ฐ์ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ๋ฌธ์์ด ์ํ
for...of
๋ฌธ์ ๋ฌธ์์ด์ ์ํํ๋ฉฐ ๊ฐ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
// ๋ฌธ์์ด ์ํ ์์
const text = 'JavaScript';
for (const char of text) {
console.log(char);
}
์ ์ฝ๋๋ ๋ฌธ์์ด text
์ ๊ฐ ๋ฌธ์๋ฅผ ์ํํ๋ฉฐ ์ถ๋ ฅํฉ๋๋ค. ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
J
a
v
a
S
c
r
i
p
t
์ด์ฒ๋ผ ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ ๋ for...of
๋ฌธ์ด ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
2. Map ๊ฐ์ฒด ์ํ
Map
๊ฐ์ฒด๋ ํค-๊ฐ ์์ ์ ์ฅํ๋ ์๋ฃ ๊ตฌ์กฐ๋ก, for...of
๋ฌธ์ ํตํด ๊ฐ ํค-๊ฐ ์์ ์ํํ ์ ์์ต๋๋ค.
// Map ๊ฐ์ฒด ์ํ ์์
const userRoles = new Map([
['admin', '๊ด๋ฆฌ์'],
['editor', 'ํธ์ง์'],
['subscriber', '๊ตฌ๋
์']
]);
for (const [role, description] of userRoles) {
console.log(role + ': ' + description);
}
์ ์ฝ๋๋ Map
๊ฐ์ฒด userRoles
์ ๊ฐ ํค์ ๊ฐ์ ์ํํ๋ฉฐ ์ถ๋ ฅํฉ๋๋ค. [role, description]
์ ๊ฐ ํค-๊ฐ ์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ํตํด ๋ฐ์ต๋๋ค. ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
admin: ๊ด๋ฆฌ์
editor: ํธ์ง์
subscriber: ๊ตฌ๋
์
Map
๊ฐ์ฒด์์ for...of
๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ํค-๊ฐ ์์ ๊ฐํธํ๊ฒ ์ ๊ทผํ ์ ์์ต๋๋ค.
3. Set ๊ฐ์ฒด ์ํ
Set
๊ฐ์ฒด๋ ์ค๋ณต๋์ง ์๋ ๊ฐ๋ค์ ์งํฉ์ผ๋ก, for...of
๋ฌธ์ ์ฌ์ฉํด ๊ฐ ์์๋ฅผ ์ํํ ์ ์์ต๋๋ค.
// Set ๊ฐ์ฒด ์ํ ์์
const uniqueNumbers = new Set([1, 2, 3, 4, 4, 5]);
for (const number of uniqueNumbers) {
console.log(number);
}
์ ์ฝ๋๋ Set
๊ฐ์ฒด uniqueNumbers
์ ์์๋ฅผ ์ํํ๋ฉฐ ์ถ๋ ฅํฉ๋๋ค. Set
์ ์ค๋ณต๋ ๊ฐ์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1
2
3
4
5
์ค๋ณต ์์ด ์ ์ผํ ๊ฐ๋ค์ ๋ค๋ฃฐ ๋ for...of
์ Set
๊ฐ์ฒด๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํฉ๋๋ค.
for...of ๋ฌธ๊ณผ for...in ๋ฌธ ๋น๊ต
for...of
์ for...in
์ ๋ฐ๋ณต๋ฌธ์ด์ง๋ง, ๊ทธ ์ฉ๋๊ฐ ๋ค๋ฆ
๋๋ค.
- for...of: ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด์ ๊ฐ์ ์ํํฉ๋๋ค. ๋ฐฐ์ด, ๋ฌธ์์ด, ๋งต(Map), ์ (Set) ๋ฑ์์ ๊ฐ์ ์ง์ ์ ๊ทผํ ๋ ์ ์ฉํฉ๋๋ค.
- for...in: ๊ฐ์ฒด์ ์์ฑ(ํค)์ ์ํํฉ๋๋ค. ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์ฑ ์ด๋ฆ(ํค)์ ์ํํ๊ณ ์ ํ ๋ ์ ํฉํฉ๋๋ค.
for...in ์์
// ๊ฐ์ฒด์ ํค๋ฅผ ์ํํ๋ for...in ์์
const person = {
name: 'Alice',
age: 30,
city: 'New York'
};
for (const key in person) {
console.log(key + ': ' + person[key]);
}
for...in
์ ๊ฐ์ฒด์ ํค์ ์ ๊ทผํ์ฌ, ํด๋น ํค์ ๊ฐ์๋ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด์ ๋ฌ๋ฆฌ for...of
๋ ๋ฐฐ์ด์ด๋ ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด์ ๊ฐ ์์ฒด๋ฅผ ์ํํ๋ ๋ฐ ์ ํฉํฉ๋๋ค.
for...of ๋ฌธ๊ณผ ๋ฐฐ์ด์ entries(), keys(), values()
for...of
๋ฌธ์ ๋ฐฐ์ด์ entries()
, keys()
, values()
๋ฉ์๋์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฐฐ์ด์ ์ธ๋ฑ์ค์ ๊ฐ์ ๋ชจ๋ ์ ๊ทผํ ์ ์์ต๋๋ค.
1. entries() ๋ฉ์๋
entries()
๋ฉ์๋๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค์ ๊ฐ์ ๋์์ ๋ฐํํ๋ ์ดํฐ๋ฌ๋ธ์ ์์ฑํฉ๋๋ค.
// entries()๋ฅผ ์ฌ์ฉํ ์์
const fruits = ['์ฌ๊ณผ', '๋ฐ๋๋', '๋ธ๊ธฐ'];
for (const [index, fruit] of fruits.entries()) {
console.log(index + ': ' + fruit);
}
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
0: ์ฌ๊ณผ
1: ๋ฐ๋๋
2: ๋ธ๊ธฐ
entries()
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด์ ๊ฐ ์์์ ํด๋น ์์์ ์ธ๋ฑ์ค์ ๋ชจ๋ ์ ๊ทผํ ์ ์์ต๋๋ค.
2. keys() ๋ฉ์๋
keys()
๋ฉ์๋๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ง ์ํํ๋ ์ดํฐ๋ฌ๋ธ์ ์์ฑํฉ๋๋ค.
// keys()๋ฅผ ์ฌ์ฉํ ์์
for (const index of fruits.keys()) {
console.log(index);
}
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ง ์ถ๋ ฅ๋ฉ๋๋ค:
0
1
2
3. values() ๋ฉ์๋
values()
๋ฉ์๋๋ ๋ฐฐ์ด์ ๊ฐ๋ง ์ํํ๋ ์ดํฐ๋ฌ๋ธ์ ์์ฑํฉ๋๋ค.
// values()๋ฅผ ์ฌ์ฉํ ์์
for (const fruit of fruits.values()) {
console.log(fruit);
}
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ฐฐ์ด์ ๊ฐ๋ง ์ถ๋ ฅ๋ฉ๋๋ค:
์ฌ๊ณผ
๋ฐ๋๋
๋ธ๊ธฐ
์ด์ฒ๋ผ for...of
๋ฌธ๊ณผ entries()
, keys()
, values()
๋ฉ์๋๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด์ ๋ ์ ์ฐํ๊ฒ ์ํํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
JavaScript์ for...of ๋ฌธ์ ๋ฐฐ์ด, ๋ฌธ์์ด, ๋งต(Map), ์
(Set)๊ณผ ๊ฐ์ ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด๋ฅผ ์ํํ ๋ ๋งค์ฐ ์ ์ฉํ ๋ฐ๋ณต๋ฌธ์
๋๋ค. ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด์ ๊ฐ์ ์ง์ ์ํํ๋ฉฐ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์๊ณ , entries()
์ ๊ฐ์ ๋ฉ์๋์ ๊ฒฐํฉํ๋ฉด ์ธ๋ฑ์ค์ ๊ฐ ๋ชจ๋์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด๋ฒ ๊ธ์์๋ for...of
๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ค์ํ ํ์ฉ ์ฌ๋ก๋ฅผ ์ดํด๋ณด์์ต๋๋ค. ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃฐ ๋ for...of
๋ฌธ์ ์ฌ์ฉํด ์ฝ๋๋ฅผ ๋์ฑ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค์ด๋ณด์ธ์!
๋๊ธ ์ฐ๊ธฐ