๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JS

[JS] : Iterator ( for ... of )

by ๊ถŒ์Šพํ–„ 2023. 7. 23.

 

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