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 ๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ค์ํ ํ์ฉ ์ฌ๋ก๋ฅผ ์ดํด๋ณด์์ต๋๋ค. ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌํ ๋ ํจ์จ์ ์ผ๋ก ํ์ฉํด๋ณด์ธ์!
๋๊ธ ์ฐ๊ธฐ