2025. 8. 29. 22:36ใFront-end/JavaScript

๋ชฉ์ฐจ
1. iterable ๊ฐ์ฒด
1-1. iterable ๊ฐ์ฒด์ ๊ฐ๋
1-2. iterable ๊ฐ๋ ์ดํดํด๋ณด๊ธฐ
2. ๋ด์ฅ ์ดํฐ๋ฌ๋ธ
3. Array.from์ผ๋ก Array ๋ง๋ค๊ธฐ
1. iterable ๊ฐ์ฒด
1. iterable ๊ฐ์ฒด์ ๊ฐ๋
iterable ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ์ผ๋ฐํํ ๊ฐ์ฒด์ด๋ค.
- ๋ฐ๋ณตํ ์ ์๋ ๊ตฌ์กฐ์ ๊ฐ์ฒด์ด๋ค.
- ๋ํ์ ์ผ๋ก ๋ฐฐ์ด, ์ ์ฌ๋ฐฐ์ด, ๋ฌธ์์ด, map, set ๋ฑ์ด ์๋ค.
- ์ดํฐ๋ ์ด์ (Symbol.iterator)ํจ์๋ฅผ ๊ฐ์ ธ์ผํ๋ค.
- for..of ๋ฌธ๋ฒ์ ์ ์ฉํ์ฌ ์ํ๋ฅผ ํ ์ ์๋ค.
2. iterable ๊ฐ๋ ์ดํดํด๋ณด๊ธฐ
์ฐ์ ์ดํฐ๋ฌ๋ธ์ด๋ผ๋ ๊ฐ๋ ์ ๋ํด ์ดํดํ ํ์๊ฐ ์๋ค.
let range = {
from: 1,
to: 5,
};
๊ฐ์ฒด range๋ 1๋ถํฐ 5๊น์ง์ ๊ฐ๊ฒฉ์ ๋ํ๋ธ๋ค.
์ฌ๊ธฐ์ Symbol.iterator(ํน์ ๋ด์ฅ ์ฌ๋ณผ) ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ฉด ์ดํฐ๋ฌ๋ธ๋ก ๋ง๋ค ์ ์๋ค.
for..of๊ฐ ๋์ํ๋๋ก ํ๋ Symbol.iterator ๋ฉ์๋๋ฅผ ์ถ๊ฐํด๋ณด์.
let range = {
from: 1,
to: 5,
};
// range์ ์๋์ ๊ฐ์ด ๊ธฐ๋ฅํ๋ ํจ์ Symbol.iterator๋ฅผ ์ถ๊ฐํด๋ดค๋ค.
range[Symbol.iterator] = function() {
return {
current: this.from,
last: this.to,
next() {
if(this.current <= this.last) {
return { done: false, value: this.current++ };
} else {
return { done: true };
}
}
};
};
for(let num of range) {
alert(num);
}
๊ธฐ์กด์ ์กด์ฌํ๋ ๊ฐ์ฒด range์๋ ์ฌ์ ํ ๋ฉ์๋ next()๊ฐ ์์ง๋ง,
์ถ๊ฐํ ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ๋ฉ์๋ next()๋ก ๋ฐ๋ณต์ ์ฌ์ฉ๋ ๊ฐ์ ๋ง๋ค์ด๋ด๊ณ ์๋ค.
๋ฐ๋ณต ๋์์ ๊ฐ์ฒด์, ๋ฐ๋ณต์ ํ๋ ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌํ ๊ฒ์ด๋ค.
[Symbol.iterator]๋ฅผ range์ ํฌํจ์์ผ๋ ๊ทธ๋ฐ ๋ฐฉํฅ์ผ๋ก ๊ธฐ๋ฅํ๋ ๊ฒ์ ์ฌ์ ํ๋ค.
let range = {
from: 1,
to: 5,
[Symbol.iterator]() {
this.current = this.from;
return this;
},
next() {
if(this.current <= this.to) {
return { done: false, value: this.current++ };
} else {
return { done: true };
}
}
};
for (let num of range) {
alert(num); // 1, 2, 3, 4, 5
}
2. ๋ด์ฅ ์ดํฐ๋ฌ๋ธ
๋ฐฐ์ด๊ณผ ๋ฌธ์์ด์ ๋ง์ด ์ฐ์ด๋ ๋ด์ฅ ์ดํฐ๋ฌ๋ธ์ด๋ค.
for (let char of "test") {
alert(char); // t, e, s, t
}
๋ด๋ถ์ ์ผ๋ก ์ดํฐ๋ ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ์ ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด์ธ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๋ ๋ด์ฅ ์ดํฐ๋ฌ๋ธ์ด ๊ฐ์ง๊ณ ์๋ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ช ์์ ์ผ๋ก ํธ์ถํด ๋ณผ ์๋ ์๋ค.
let str = 'hello';
let iterator = str[Symbol.iterator]();
while(true) {
let result = iterator.next();
if(result.done) break;
console.log(result.value); // h, e, l, l, o
}
์ดํฐ๋ ์ดํฐ๋ฅผ ๋ช ์์ ์ผ๋ก ํธ์ถํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์ผ๋, ๋ช ์์ ์ผ๋ก ํธ์ถํ์์ ๊ฒฝ์ฐ for..of๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค
๋ฐ๋ณต์ ๋ ์ธ์ธํ๊ฒ ํต์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
3. Array.from์ผ๋ก ์ง์ง Array ๋ง๋ค๊ธฐ
๋ฉ์๋ Array.from์ผ๋ก ์ดํฐ๋ฌ๋ธ์ด๋ ์ ์ฌ ๋ฐฐ์ด์ ๋ฐ์ ์ง์ง Array๋ฅผ ๋ง๋ค ์ ์๋ค.
์ด๋ฅผ ํตํด ์ดํฐ๋ฌ๋ธ์ด๋ ์ ์ฌ ๋ฐฐ์ด์ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
// Array.from(์ ์ฌ๋ฐฐ์ด)
let arrayLike = {
0: "Hello",
1: "World",
length: 2
};
let arr = Array.from(arrayLike);
console.log(arr.pop()); // World
// Array.from(์ดํฐ๋ฌ๋ธ)
let arr = Array.from(range);
console.log(arr); // 1, 2, 3, 4, 5
Array.from ๋ฉ์๋๋ ๊ฐ์ฒด๋ฅผ ๋ฐ์ ์ดํฐ๋ฌ๋ธ/์ ์ฌ๋ฐฐ์ด์ธ์ง ์กฐ์ฌํ๋ค.
๋๊ฒจ ๋ฐ์ ์ธ์๊ฐ ์ดํฐ๋ฌ๋ธ์ด๋ ์ ์ฌ๋ฐฐ์ด์ด ๋ง๋ค๋ฉด, ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ๊ณ , ๊ฐ์ฒด์ ๋ชจ๋ ์์๋ฅผ ๋ฐฐ์ด๋ก ๋ณต์ฌํ๋ค.
// Array.from(obj[, mapFn, thisArg])
const multiplier = {
factor: 3,
};
const str = "12345";
const arr = Array.from(
str, // 1. ๋ฐฐ์ด๋ก ๋ง๋ค ์ดํฐ๋ฌ๋ธ
function(char) { return Number(char) * this.factor; }, // 2. ๊ฐ ์์์ ์ ์ฉํ ํจ์(this๊ฐ multiplier๋ฅผ ๊ฐ๋ฆฌํด)
multiplier // 3. ๊ฐ ์์์ this๋ฅผ ์ง์
};
console.log(arr); // [3, 6, 9, 12, 15]
- obj : ๋ฐฐ์ด๋ก ๋ง๋ค ์ดํฐ๋ฌ๋ธ/์ ์ฌ ๋ฐฐ์ด
- mapFn : ๊ฐ ์์์ ์ ์ฉํ ํจ์
- thisArg : ๊ฐ ์์์ this๋ฅผ ์ง์
์ฐธ๊ณ
'Front-end > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| E2 : ์์ ๊ฒ์ํ๊ธฐ (0) | 2025.09.08 |
|---|---|
| E1 : JS๋ก DOM ๊ฐ์ฒด ํ์ํ๊ธฐ (0) | 2025.09.07 |
| ์ต์ ๋ ์ฒด์ด๋ ?. (1) | 2025.08.29 |
| B27: JSON ๋ฉ์๋ (0) | 2025.08.26 |
| B26: ๊ตฌ์กฐ ๋ถํด ํ ๋น : object๋ฅผ ๋ณ์๋ก ๋ถํดํ๊ธฐ (0) | 2025.08.26 |
GitHub