Iterator ?
JS์์ ๋ฐ๋ณต์(Iterator)๋ ์ํ์ค๋ฅผ ์ ์ํ๊ณ ์ข ๋ฃ์์ ๋ฐํ๊ฐ์ ์ ์ฌ์ ์ผ๋ก ์ ์ํ๋ ํ๋์ "๊ฐ์ฒด" ๋ผ๊ณ ํ๋ค.
๋ด๊ฐ iterator๋ฅผ ๋ง์ฃผ์น๊ฒ ๋ ๊ฒ์
map ๊ฐ์ฒด๊ฐ ๊ฐ์ง key๋ฅผ ํ์ธํ๊ณ ์ keys ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ ๋ ์๋ค.
set ๊ฐ์ฒด๊ฐ ๊ฐ์ง value๋ฅผ ํ์ธํ ๋๋ ๋ง์ฐฌ๊ฐ์ง์๋ค.
๊ทธ๋์ ์ค๋์ iterator์ ๋ํด ์์๋ณธ๋ค๊ธฐ ๋ณด๋ค๋
์ด iterator ๋ผ๋ ๊ฐ์ฒด๋ฅผ for ... of ๋ฌธ์ ํตํด์ ๋ฐ๋ณต๋ฌธ์ ๋๋ ค๋ณผ ์์ ์ด๋ค.
Iterator ๋ฅผ ํ์ธํ ๋ถ๋ถ
map ๋ถ๋ถ.
// map
// map ๊ฐ์ฒด ์์ฑ
const myMap = new Map();
// ๋ฐ์ดํฐ ์ ์ฅ
myMap.set('one', 1);
myMap.set('two', 2);
myMap.set('three', 3);
// myMap์ key๊ฐ๋ค ํ์ธ
console.log(myMap.keys());
// ์ถ๋ ฅ ๊ฐ :
[Map Iterator] { 'one', 'two', 'three' }
set ๋ถ๋ถ.
// set ๊ฐ์ฒด ์์ฑ
const mySet = new Set();
// ๋ฐ์ดํฐ ์ ์ฅ
mySet.add('value1');
mySet.add('value2');
mySet.add('value3');
// set์ด ๊ฐ์ง value ํ์ธ
console.log(mySet.values());
// ์ถ๋ ฅ ๊ฐ :
[Set Iterator] { 'value1', 'value2', 'value3' }
๋ฐ๋ก ์์ ๋ ๊ตฐ๋ฐ์์ Iterator ์ ์กด์ฌ์ ๋ํด์ ์ฒ์ ์๊ฒ ๋์๋ค.
for ... of ๋ฌธ ?
๋ฐ๋ณต๊ฐ๋ฅํ ๊ฐ์ฒด [Array, Map, Set, ๋ฑ๋ฑ ... ] ์ ๋ํด์ ๋ฐ๋ณตํ๊ณ ๊ฐ ๊ฐ๋ณ ์์ฑ๊ฐ์ ๋ํด ์คํ๋๋ ๋ฌธ์ด ์๋ ๋ฃจํ๋ฅผ ์์ฑํ๋ค๊ณ ํ๋ค.
for ... of ๋ฌธ ํํ
const array1 = ['a', 'b', 'c'];
for (const element of array1) {
console.log(element);
}
// Expected output: "a"
// Expected output: "b"
// Expected output: "c"
for ๊ดํธ ์์ const ๋ก ๋ช ์นญ์ ํ๋ ์ ์ธํด์ฃผ๊ณ , of ๋ค์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆด ๊ฐ์ฒด๊ฐ ์ค๋ฉด์ ๊ทธ ์์ ์์๋ค์ด ํ๋ํ๋ ์ ์ธํ ๊ฐ์ ๋ค์ด๊ฐ console.log ๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ด Map ๊ฐ์ฒด์ ์ ์ฉ์์ผ ๋ณด๊ธฐ
์์ ํํ๋ฅผ ์์์ผ์์ ๋ด๊ฐ ๋ง๋ Map ๊ฐ์ฒด์๋ ์ ์ฉ์์ผ ๋ณด์๋ค.
map ๊ฐ์ฒด๊ฐ ๊ฐ์ง key
console.log(myMap.keys()); // [Map Iterator] { 'one', 'two', 'three' }
for (const key of myMap.keys()) {
console.log(key);
}
// ์ถ๋ ฅ ๊ฐ :
one
two
three
map ๊ฐ์ฒด๊ฐ ๊ฐ์ง value
console.log(myMap.values()); // [Map Iterator] { 1, 2, 3 }
for (const value of myMap.values()) {
console.log(value);
}
// ์ถ๋ ฅ ๊ฐ :
1
2
3
map ๊ฐ์ฒด๊ฐ ๊ฐ์ง key-value pair
console.log(myMap.entries()); // [Map Entries] { [ 'one', 1 ], [ 'two', 2 ], [ 'three', 3 ] }
for (const entry of myMap.entries()) {
console.log(entry);
}
// ์ถ๋ ฅ ๊ฐ :
[ 'one', 1 ]
[ 'two', 2 ]
[ 'three', 3 ]
๋ด Set ๊ฐ์ฒด์๋ ์ ์ฉ์์ผ ๋ณด๊ธฐ
์ด๋ฒ์ ๋ด๊ฐ ๋ง๋ Set ๊ฐ์ฒด์๋ ์ ์ฉ์์ผ ๋ณด์๋ค.
set์ value ๊ฐ๋ง ์ ์ฅ์ ํ๊ธฐ ๋๋ฌธ์ value๋ง ๋ฐ๋ณต๋ฌธ์ ๋๋ ค๋ณด์๋ค.
console.log(mySet.values()); // [Set Iterator] { 'value1', 'value2', 'value3' }
for (const value of mySet.values()) {
console.log(value);
}
// ์ถ๋ ฅ ๊ฐ :
value1
value2
value3
์๊ฒ ๋ ์
const ๋ก ์ ์ธํ ๋ณ์ ์ด๋ฆ์๋ ์๋ฌด์ด๋ฆ์ด๋ ๋ค์ด์๋ ์๊ด์๋ค. ๋ค๋ง ์ฝ๋์ ๊ฐ๋ ์ฑ์ ์ํด ์ฐ๊ณ๋๋ ๋จ์ด๋ฅผ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด ์ข์๊ฒ ๊ฐ๋ค.
for ๋ฌธ, while ๋ฌธ, forEach, map ๋ฟ๋ง์๋๋ผ ์๋ก์ด ๋ฐ๋ณต๋ฌธ์ธ for ... of ๋ฅผ ์๊ฒ๋์ด์ ์ข์๋ค.
๊ทธ๋ฆฌ๊ณ Iterator ๋ผ๋๊ฒ์ด ๋ ํ๋์ ๊ฐ์ฒด๋ผ๋ ์ฌ์ค์ ์๊ฒ๋์ด์ ์ฌ๋ฏธ๊ฐ ๋ ๋ถ์๋ค.
iterator์ ๋ป์ "๋ฐ๋ณต์"๋ผ๋ ๋ป์ด๋ค.
์ด๋ฆ๊ทธ๋๋ก ๋ฐ๋ณต์ฑ์ ๋๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ์ค๋์ for ... of ๋ฌธ์ด ์ ์ฉ๋๊ฒ์ด ์๋๊ฐ ์ถ๋ค.
#for_of #๋ฐ๋ณต๋ฌธ #iterator #set #map
'JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] : Switch (0) | 2023.07.26 |
---|---|
[JS] : Null / Undefined (0) | 2023.07.24 |
[JS] : Set (0) | 2023.07.22 |
[JS] : Map (0) | 2023.07.21 |
[JavaScript] : post.destroy() / await Posts.destroy({where : {postId}}) (0) | 2023.07.14 |