Responsive Advertisement

JavaScript์˜ for...of ๋ฌธ: ์ดํ„ฐ๋Ÿฌ๋ธ” ์ˆœํšŒ ๊ฐ€์ด๋“œ

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 ๋ฌธ์„ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ๋ฅผ ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”!

๋Œ“๊ธ€ ์“ฐ๊ธฐ