Responsive Advertisement

JavaScript์˜ for...in ๋ฌธ: ๊ฐ์ฒด ์ˆœํšŒ ๊ฐ€์ด๋“œ

JavaScript์—์„œ for...in ๋ฌธ์€ ๊ฐ์ฒด์˜ ์†์„ฑ(ํ‚ค)๋ฅผ ์ˆœํšŒํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ๊ฐ ์†์„ฑ์ด๋‚˜ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” JavaScript์˜ for...in ๋ฌธ ์‚ฌ์šฉ๋ฒ•๊ณผ ๋‹ค์–‘ํ•œ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ๊ทธ ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

JavaScript for...in ๋ฌธ์ด๋ž€?

for...in ๋ฌธ์€ ์ฃผ๋กœ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ์†์„ฑ์˜ ํ‚ค์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” for...of๊ฐ€ ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. for...in ๋ฌธ์€ ๊ฐ์ฒด์˜ ๋ชจ๋“  ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•œ ์†์„ฑ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

for...in ๋ฌธ ๊ธฐ๋ณธ ๊ตฌ์กฐ

for (๋ณ€์ˆ˜ in ๊ฐ์ฒด) {
    // ๋ฐ˜๋ณต ์‹คํ–‰ํ•  ์ฝ”๋“œ
}

for...in ๋ฌธ์€ ๊ฐ์ฒด์˜ ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•œ ์†์„ฑ ํ‚ค๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋  ๋•Œ๋งˆ๋‹ค ๋ณ€์ˆ˜์— ๊ฐ์ฒด์˜ ์†์„ฑ ์ด๋ฆ„์ด ํ• ๋‹น๋˜๊ณ , ๊ทธ ์†์„ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

for...in ๋ฌธ ์˜ˆ์‹œ

// ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ˆœํšŒํ•˜๋Š” ์˜ˆ์‹œ
const person = {
    name: 'John',
    age: 30,
    city: 'New York'
};

for (let key in person) {
    console.log(key + ': ' + person[key]);
}

์œ„ ์ฝ”๋“œ์—์„œ๋Š” person ๊ฐ์ฒด์˜ ๊ฐ ์†์„ฑ ์ด๋ฆ„(key)์ด for...in ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ์ˆœํšŒ๋ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:


name: John
age: 30
city: New York

key์—๋Š” ๊ฐ์ฒด์˜ ์†์„ฑ ์ด๋ฆ„(ํ‚ค)์ด ๋“ค์–ด๊ฐ€๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์†์„ฑ ๊ฐ’(person[key])์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

for...in ๋ฌธ๊ณผ ๋ฐฐ์—ด

for...in ๋ฌธ์€ ๋ฐฐ์—ด์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฃผ๋กœ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด ์š”์†Œ ์ž์ฒด๋ฅผ ์ˆœํšŒํ•˜๋ ค๋ฉด for...of๊ฐ€ ๋” ์ ํ•ฉํ•˜๋ฉฐ, for...in์€ ๋ฐฐ์—ด์˜ ์†์„ฑ๊นŒ์ง€ ํฌํ•จํ•ด ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

for...in๊ณผ ๋ฐฐ์—ด ์˜ˆ์‹œ

// ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ˆœํšŒํ•˜๋Š” for...in ์˜ˆ์‹œ
const fruits = ['์‚ฌ๊ณผ', '๋ฐ”๋‚˜๋‚˜', '๋”ธ๊ธฐ'];

for (let index in fruits) {
    console.log(index + ': ' + fruits[index]);
}

์œ„ ์ฝ”๋“œ๋Š” ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ์š”์†Œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:


0: ์‚ฌ๊ณผ
1: ๋ฐ”๋‚˜๋‚˜
2: ๋”ธ๊ธฐ

์ด์ฒ˜๋Ÿผ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•  ๋•Œ for...in ๋ฌธ์€ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด ์š”์†Œ ์ž์ฒด์— ์ ‘๊ทผํ•˜๋ ค๋ฉด for...of๊ฐ€ ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์—์„œ for...in์˜ ์ฃผ์˜์ 

๋ฐฐ์—ด์—์„œ for...in์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐฐ์—ด์˜ ์†์„ฑ๊นŒ์ง€ ์ˆœํšŒ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// ๋ฐฐ์—ด์˜ ์ปค์Šคํ…€ ์†์„ฑ ์ถ”๊ฐ€ ์˜ˆ์‹œ
const fruits = ['์‚ฌ๊ณผ', '๋ฐ”๋‚˜๋‚˜', '๋”ธ๊ธฐ'];
fruits.extra = '์˜ค๋ Œ์ง€';

for (let index in fruits) {
    console.log(index + ': ' + fruits[index]);
}

๋ฐฐ์—ด์— extra๋ผ๋Š” ์ปค์Šคํ…€ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•œ ํ›„, for...in ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์†์„ฑ๊นŒ์ง€ ์ˆœํšŒ๋ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:


0: ์‚ฌ๊ณผ
1: ๋ฐ”๋‚˜๋‚˜
2: ๋”ธ๊ธฐ
extra: ์˜ค๋ Œ์ง€

๋ฐฐ์—ด์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ปค์Šคํ…€ ์†์„ฑ์ด ํฌํ•จ๋˜์–ด ์ˆœํšŒ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐฐ์—ด ์š”์†Œ๋งŒ์„ ์ˆœํšŒํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด for...of๋‚˜ for ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

for...in ๋ฌธ๊ณผ ๊ฐ์ฒด์˜ ์ƒ์† ์†์„ฑ

for...in ๋ฌธ์€ ๊ฐ์ฒด์˜ ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•œ ์†์„ฑ์„ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ์ฒด ์ž์ฒด์˜ ์†์„ฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊ฐ์ฒด๊ฐ€ ์ƒ์†๋ฐ›์€ ์†์„ฑ๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ์ฒด ์ž์ฒด์˜ ์†์„ฑ๋งŒ ์ˆœํšŒํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” hasOwnProperty() ๋ฉ”์„œ๋“œ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

hasOwnProperty()์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ

// ๊ฐ์ฒด์˜ ์ž์ฒด ์†์„ฑ๋งŒ ์ˆœํšŒํ•˜๋Š” ์˜ˆ์‹œ
const person = {
    name: 'Alice',
    age: 25
};

// ๊ฐ์ฒด์— ์ƒ์†๋œ ์†์„ฑ ์ถ”๊ฐ€
Object.prototype.city = 'Seoul';

for (let key in person) {
    if (person.hasOwnProperty(key)) {
        console.log(key + ': ' + person[key]);
    }
}

์œ„ ์ฝ”๋“œ์—์„œ Object.prototype์— city ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด, for...in ๋ฌธ์€ ์ด ์ƒ์†๋œ ์†์„ฑ๋„ ์ˆœํšŒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด hasOwnProperty()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ์ž์ฒด์˜ ์†์„ฑ๋งŒ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

for...in vs for...of

for...in๊ณผ for...of๋Š” ๋‘˜ ๋‹ค ๋ฐ˜๋ณต๋ฌธ์ด์ง€๋งŒ, ์‚ฌ์šฉ ์šฉ๋„๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. for...in์€ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ˆœํšŒํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜๊ณ , for...of๋Š” ๋ฐฐ์—ด์ด๋‚˜ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด์˜ ๊ฐ’์„ ์ˆœํšŒํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

for...of ์˜ˆ์‹œ

// ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ˆœํšŒํ•˜๋Š” for...of ์˜ˆ์‹œ
const fruits = ['์‚ฌ๊ณผ', '๋ฐ”๋‚˜๋‚˜', '๋”ธ๊ธฐ'];

for (let fruit of fruits) {
    console.log(fruit);
}

์œ„ ์˜ˆ์‹œ๋Š” for...of ๋ฌธ์„ ์‚ฌ์šฉํ•ด ๋ฐฐ์—ด fruits์˜ ๊ฐ ๊ฐ’์„ ์ˆœํšŒํ•˜๋ฉฐ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ๊ฐ’ ์ž์ฒด์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, for...of๋Š” ๋ฐฐ์—ด์„ ์ˆœํšŒํ•  ๋•Œ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

for...in์˜ ํ™œ์šฉ ์‚ฌ๋ก€

for...in ๋ฌธ์€ ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•˜๊ณ  ๊ทธ ์†์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ for...in์˜ ๋ช‡ ๊ฐ€์ง€ ์‹ค์šฉ์ ์ธ ํ™œ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

1. ๊ฐ์ฒด ์†์„ฑ ๋ณต์‚ฌ

for...in์„ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด์˜ ๋ชจ๋“  ์†์„ฑ์„ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ๊ฐ์ฒด ์†์„ฑ ๋ณต์‚ฌ ์˜ˆ์‹œ
const source = { a: 1, b: 2, c: 3 };
const target = {};

for (let key in source) {
    if (source.hasOwnProperty(key)) {
        target[key] = source[key];
    }
}

console.log(target);

์œ„ ์˜ˆ์‹œ์—์„œ๋Š” source ๊ฐ์ฒด์˜ ๋ชจ๋“  ์†์„ฑ์„ target ๊ฐ์ฒด๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์ƒ์†๋œ ์†์„ฑ์€ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

2. ๊ฐ์ฒด ์†์„ฑ ๊ฐ’ ๊ณ„์‚ฐ

for...in์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ์†์„ฑ ๊ฐ’์„ ๋ชจ๋‘ ๋”ํ•˜๋Š” ๊ณ„์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ๊ฐ์ฒด ์†์„ฑ ๊ฐ’ ํ•ฉ๊ณ„ ๊ณ„์‚ฐ ์˜ˆ์‹œ
const scores = {
    math: 90,
    english: 85,
    science: 95
};

let total = 0;

for (let key in scores) {
    total += scores[key];
}

console.log('์ด์ :', total);

์œ„ ์ฝ”๋“œ๋Š” scores ๊ฐ์ฒด์˜ ๊ฐ ๊ณผ๋ชฉ ์ ์ˆ˜๋ฅผ ๋ชจ๋‘ ๋”ํ•ด ์ด์ ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

JavaScript์˜ for...in ๋ฌธ์€ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ˆœํšŒํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•œ ๋ฐ˜๋ณต๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ํ‚ค์™€ ๊ฐ’์„ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, hasOwnProperty()์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด ์ž์ฒด์˜ ์†์„ฑ๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์„ ์ˆœํšŒํ•  ๋•Œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์†์„ฑ๊นŒ์ง€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” for...in ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋‹ค์–‘ํ•œ ํ™œ์šฉ ์‚ฌ๋ก€๋ฅผ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•ด๋ณด์„ธ์š”!

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