Language/JavaScript

[JS] ๐Ÿ“š ์ดํ„ฐ๋Ÿฌ๋ธ” & ์ดํ„ฐ๋ ˆ์ดํ„ฐ - ๐Ÿ’ฏ์™„๋ฒฝ ์ดํ•ด

์ธํŒŒ_ 2021. 10. 6. 10:55

์ดํ„ฐ๋Ÿฌ๋ธ”-์ดํ„ฐ๋ ˆ์ดํ„ฐ

 

์ดํ„ฐ๋Ÿฌ๋ธ”(interable)

์ดํ„ฐ๋Ÿฌ๋ธ”(interable)์ด๋ž€ ์ž๋ฃŒ๋ฅผ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์“ฐ๋Š” ๋ฐฐ์—ด ์—ญ์‹œ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด์ด๋‹ค.

๊ทธ๋Ÿผ ๋งŒ์ผ ์ด ๋ฐฐ์—ด์—๊ฒŒ ์ดํ„ฐ๋Ÿฌ๋ธ” ํ‘œ์‹์„ ์—†์• ๋ฒ„๋ฆฌ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

let arr = [1,2,3]
for(const a of arr) console.log (a) // ์ •์ƒ์ž‘๋™ 1,2,3


arr[Symbol.iterator] = null; // ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ˆœํšŒ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค
for(const a of arr) console.log (a) // Uncaught TypeError: arr is not iterable

๋ฉ€์ฉกํ•œ ๋ฐฐ์—ด์ž„์— ๋ถˆ๊ตฌํ•˜๊ณ  for..of๋กœ ์ˆœํšŒํ• ์ˆ˜๊ฐ€ ์—†๊ฒŒ ๋˜์—ˆ๋‹ค.

์ € [Symbol.iterator] ๋ผ๋Š” ์ฝ”๋“œ๊ฐ€ ๋ˆˆ์— ๋ˆ๋‹ค. ์ด์ œ ์ €๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด์ž.


์ดํ„ฐ๋Ÿฌ๋ธ”๊ณผ ์ดํ„ฐ๋ ˆ์ดํ„ฐ

 

iterable Prococal / iterator Prococal

์ •์˜ : ์ดํ„ฐ๋Ÿฌ๋ธ”์„ [for...of], [์ „๊ฐœ ์—ฐ์‚ฐ์ž], [๋น„๊ตฌ์กฐํ™”] ..๋“ฑ, ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋‚˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ์—ฐ์‚ฐ์ž๋“ค๊ณผ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋„๋ก ํ•˜๋Š” ์•ฝ์†๋œ ๊ทœ์•ฝ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ž€ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ทœ์•ฝ์„ ๋”ฐ๋ฅด๋Š” ๊ฐ์ฒด์ธ ์…ˆ์ด๋‹ค.

โ€‹

iterable

์ •์˜ : ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” [Symbol.iterator]() ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด

๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ Array.prototype ์˜ Symbol.iterator ๋ฅผ ์ƒ์†๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋‹ค. ๋ฌธ์ž์—ด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€

์ดํ„ฐ๋Ÿฌ๋ธ”-์ดํ„ฐ๋ ˆ์ดํ„ฐ

โ€‹

iterator

์ •์˜ : {value : ๊ฐ’ , done : true/false} ํ˜•ํƒœ์˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” next() ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด.

next ๋ฉ”์„œ๋“œ๋กœ ์ˆœํ™˜ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋‹ค.

[Symbol.iterator]() ์•ˆ์— ์ •์˜ ๋˜์–ด์žˆ๋‹ค.

const arr = [1,2,3]; //arr๋Š” ๊ทธ๋ƒฅ ํ‰๋ฒ”ํ•œ ๋ฐฐ์—ด

const iter = arr[Symbol.iterator](); 
/*
๋ฌธ๋ฒ• ํŒŒํ—ค์น˜๊ธฐ : key๊ฐ’์„ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ๋ณ€์ˆ˜๋กœ ์ฃผ๊ธฐ์œ„ํ•ด arr[๋ณ€์ˆ˜] ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค.
์œ„ ์‚ฌ์ง„์—์„œ ๋ณด๋“ฏ์ด, Symbol.iterator ๋ผ๋Š” key๊ฐ’์„ ๊ฐ€์ง€๊ณ  value๋Š” ํ•จ์ˆ˜์ด๋‹ค. 
์ด๋ฅผ ์ ‘๊ทผํ•ด์„œ ํ•จ์ˆ˜์‹คํ–‰() ์‹œํ‚ค๋ฉด ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋˜์–ด iter์— ๋‹ด๊ธฐ๊ฒŒ ๋œ๋‹ค.
*/

iter.next()
//>{value:1,done: false}
iter.next()
//>{value:2, done: false},
iter.next()
//{value:3, done: false}
iter.next()
//{value: undefined, done: true}

์ดํ„ฐ๋Ÿฌ๋ธ”-์ดํ„ฐ๋ ˆ์ดํ„ฐ
์ดํ„ฐ๋Ÿฌ๋ธ”-์ดํ„ฐ๋ ˆ์ดํ„ฐ


[Symbol.iterator]

์—ฌ์ „ํžˆ ์ดํ„ฐ๋Ÿฌ๋ธ” / ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐœ๋…์ด ๋ญ” ์†Œ๋ฆฌ์ธ์ง€ ๋ชจ๋ฅด๊ฒƒ์ด๋‹ค.

์ง์ ‘ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ผ๋Š” ๊ฐœ๋…์„ ์ดํ•ดํ•ด ๋ณด๋„๋ก ํ•˜์ž.

let range = { // 1) ๊ฐ์ฒด ์ƒ์„ฑ
  from: 1,
  to: 5
};


range[Symbol.iterator] = function() { // 2) ์ƒˆ๋กœ์šด ํ‚ค:๋ฐธ๋ฅ˜ ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ํ‚ค๋Š” ๋ณ€์ˆ˜ํ˜•ํƒœ, ๋ฐธ๋ฅ˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

    return { // ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ข€ ํŠน๋ฒฝํ•  ํ˜•ํƒœ์˜ ๊ฐ์ฒด
      current: this.from,
      last: this.to,

      next() { // 3) next() ์ •์˜
        if (this.current <= this.last) {
          return { done: false, value: this.current++ }; 
          // 4) {value : ๊ฐ’ , done : true/false} ํ˜•ํƒœ์˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
        } else {
          return { done: true };
        }
      }
    };
};

ํ‰๋ฒ”ํ•œ range๊ฐ์ฒด๋ฅผ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ๋ด…์‹œ๋‹ค.

  1. ํ‰๋ฒ”ํ•œ range๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค.
  2. ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ์“ฐ๋Š” ๊ฐ์ฒด์— ์ƒˆ๋กœ์šด key:value๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„๋•Œ, range[key] = value ๋ฅผ ํ†ตํ•ด Symbol.iterator ํ‚ค๊ฐ’๊ณผ ๋ฐธ๋ฅ˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•ด ๋„ฃ์—ˆ๋‹ค.
  3. ์ถ”๊ฐ€ํ•œ ํ•จ์ˆ˜๋Š” ์–ด๋– ํ•œ ํŠน๋ณ„ํ•œ ๊ฐ์ฒด๋ฅผ returnํ•˜๊ฒŒ ๋˜์–ด์žˆ๊ณ , ์ด ๊ฐ์ฒด ์•ˆ์— next()๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ ํ•˜์˜€๋‹ค.
  4. ์ตœ์ข…์ ์œผ๋กœ {value : ๊ฐ’ , done : true/false} ํ˜•ํƒœ์˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด๋ฅผ returnํ•œ๋‹ค.

โ€‹

Q. ์ž, ๊ทธ๋Ÿผ ์ด์ œ ๋ฌด์—‡์ด ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด์ด๊ณ , ๋ฌด์—‡์ด ์ดํ„ฐ๋ ˆ์ดํ„ฐ ์ผ๊นŒ?

- ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋Š” range๋‹ค. ์™œ๋ƒํ•˜๋ฉด Symbol.iterator๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋–„๋ฌธ

- ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด๋Š” Symbol.iterator() ๋ฉ”์„œ๋“œ์—์„œ ๋ฆฌํ„ดํ•œ ๊ฐ์ฒด๊ฐ€ ๋ฐ”๋กœ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด ๊ฐ์ฒด ์•ˆ์—๋Š” {value : ๊ฐ’ , done : true/false}๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” next()๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ดํ„ฐ๋Ÿฌ๋ธ”-์ดํ„ฐ๋ ˆ์ดํ„ฐ

โ€‹

์ด๋ฒˆ์—๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๊ฐ€ for..of์—์„œ ์–ด๋–ป๊ฒŒ ์ˆœํšŒํ•˜๋Š”์ง€ ๊ณผ์ •์„ ์•Œ์•„๋ณด์ž.

let range = { // ๊ฐ์ฒด ์ƒ์„ฑ
  from: 1,
  to: 5
};


// 1. for..of ์ตœ์ดˆ ํ˜ธ์ถœ ์‹œ, Symbol.iterator๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
range[Symbol.iterator] = function() {

  // Symbol.iterator๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  // 2. ์ดํ›„ for..of๋Š” ๋ฐ˜ํ™˜๋œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”๋ฐ, ์ด๋•Œ ๋‹ค์Œ ๊ฐ’๋„ ์ •ํ•ด์ง‘๋‹ˆ๋‹ค.
  return {
    current: this.from,
    last: this.to,

    // 3. for..of ๋ฐ˜๋ณต๋ฌธ์— ์˜ํ•ด ๋ฐ˜๋ณต๋งˆ๋‹ค next()๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
    next() {
      // 4. next()๋Š” ๊ฐ’์„ ๊ฐ์ฒด {done:.., value :...}ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      if (this.current <= this.last) {
        return { done: false, value: this.current++ }; // ์ˆœํšŒ ์ง„ํ–‰
      } else {
        return { done: true }; // ์ˆœํšŒ ์ข…๋ฃŒ
      }
    }
  };
};

// ์ด์ œ ์˜๋„ํ•œ ๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค!
for (let num of range) {
  alert(num); // 1, 2, 3, 4, 5
}
  1. for..of๊ฐ€ ์‹œ์ž‘๋˜์ž๋งˆ์ž for..of๋Š” Symbol.iterator๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  2. ์ดํ›„ for..of๋Š” ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด(์ดํ„ฐ๋ ˆ์ดํ„ฐ)๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
  3. for..of์— ๋‹ค์Œ ๊ฐ’์ด ํ•„์š”ํ•˜๋ฉด, for..of๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ next()๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  4. next()์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ {done: Boolean, value: any}์™€ ๊ฐ™์€ ํ˜•ํƒœ์ด์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ์ˆœํšŒ๊ฐ€ ๋œ๋‹ค.
    done=true๋Š” ๋ฐ˜๋ณต์ด ์ข…๋ฃŒ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. done=false์ผ๋• value์— ๋‹ค์Œ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

โ€‹

* ํ•œ๋ฐฉ์— ์ดํ„ฐ๋Ÿฌ๋ธ”+์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ

ํ•œ ๊ฐ์ฒด์— ์•„์˜ˆ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ˜•์‹์„ ์ •์˜ํ•ดํ•˜๋ฉด, range๊ฐ์ฒด๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด์ด์ž ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด ์—ญํ• ์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ‘œํ˜„๋งŒ ๋‹ค๋ฅผ๋ถ„ ์‹คํ–‰์ž์ฒด๋Š” ์œ„์™€ ์ฐจ์ด์—†๋‹ค.

let range = {
  from: 1,
  to: 5,

  [Symbol.iterator]() { // ์ƒ์„ฑ์ž
    this.current = this.from;
    this.last = this.to;
    return this; // ์ž๊ธฐ ์ž์‹ ์„ ๋ฐ˜ํ™˜. ์ž๊ธฐ์ž์‹ ์—” next()๋ฉ”์†Œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด์žˆ์œผ๋‹ˆ, next()๋ฉ”์†Œ๋“œ
                 // ์—์„œ์˜ this๋Š” ์ƒ์„ฑ์ž๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค.
  },

  next() { // ์•„์˜ˆ ๊ฐ์ฒด์•ˆ์— 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
}

 


์œ ์‚ฌ๋ฐฐ์—ด vs ์ดํ„ฐ๋Ÿฌ๋ธ”

  • โ€‹์ดํ„ฐ๋Ÿฌ๋ธ”(iterable) : ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ฐ”์™€ ๊ฐ™์ด ๋ฉ”์„œ๋“œ Symbol.iterator๊ฐ€ ๊ตฌํ˜„๋œ ๊ฐ์ฒด.
  • ์œ ์‚ฌ ๋ฐฐ์—ด(array-like) : ์ธ๋ฑ์Šค์™€ length ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ์–ด์„œ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฐ์ฒด.
* Map์ž๋ฃŒํ˜•์ด๋‚˜ DOM์—์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฐ์—ด, arguments๋ฐฐ์—ด์€ ๋ชจ๋‘ ์ดํ„ฐ๋Ÿฌ๋ธ” ์ž‘์—…์ด ๋งˆ์ณ์ง„ ์œ ์‚ฌ๋ฐฐ์—ด์ด๋‹ค.
์›๋ž˜ ์ƒ ์œ ์‚ฌ๋ฐฐ์—ด์€ ์ˆœํšŒ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

โ€‹์•„๋ž˜ ์˜ˆ์‹œ์˜ ๊ฐ์ฒด๋Š” ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด์ด๊ธด ํ•˜์ง€๋งŒ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋‹ค.

let arrayLike = { // ์ธ๋ฑ์Šค์™€ lengthํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ์Œ => ์œ ์‚ฌ ๋ฐฐ์—ด
  0: "Hello",
  1: "World",
  length: 2
};


for (let item of arrayLike) {} // Symbol.iterator๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์—๋Ÿฌ ๋ฐœ์ƒ

์ดํ„ฐ๋Ÿฌ๋ธ”๊ณผ ์œ ์‚ฌ ๋ฐฐ์—ด์€ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— push, pop ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ดํ„ฐ๋Ÿฌ๋ธ”๊ณผ ์œ ์‚ฌ ๋ฐฐ์—ด์„ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๊ณ  ์‹ถ์„ ๋•Œ ์ด๋Ÿฐ ํŠน์ง•์€ ๋ถˆํŽธํ•จ์„ ์ดˆ๋ž˜ํ•˜๊ฒŒ ๋œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด, range์— ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค.

์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ดํ„ฐ๋Ÿฌ๋ธ”๊ณผ ์œ ์‚ฌ ๋ฐฐ์—ด์— ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์ •๋‹ต์€ ์œ ์‚ฌ๋ฐฐ์—ด์„ ์ง„์งœ๋ฐฐ๊ธฐ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

โ€‹

> Array.from ๋ฉ”์„œ๋“œ

๋ฒ”์šฉ ๋ฉ”์„œ๋“œ Array.from๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋‚˜ ์œ ์‚ฌ ๋ฐฐ์—ด์„ ๋ฐ›์•„ ‘์ง„์งœ’ Array๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์ด ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋‚˜ ์œ ์‚ฌ ๋ฐฐ์—ด์— ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

let arrayLike = { //์œ ์‚ฌ๋ฐฐ์—ด
  0: "Hello",
  1: "World",
  length: 2
};
Array.from(arrayLike); // ["Hello", "World"]


let arr = Array.from(arrayLike); // ["Hello", "World"] ๋ฐฐ์—ด์ด ๋จ์œผ๋กœ์„œ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋„ ๋œ๋‹ค.
for (let item of arr) {} // 1,2,3,4,5 (๋ฐฐ์—ด-๋ฌธ์ž์—ด ํ˜• ๋ณ€ํ™˜์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.)

 

๋ฌธ์ž์—ด๋„ ์ดํ„ฐ๋Ÿฌ๋ธ”

๋ฐฐ์—ด๊ณผ ๋ฌธ์ž์—ด์€ ๊ฐ€์žฅ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์“ฐ์ด๋Š” ๋‚ด์žฅ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋‹ค.

for (let char of "test") {
  // ๊ธ€์ž ํ•˜๋‚˜๋‹น ํ•œ ๋ฒˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(4ํšŒ ํ˜ธ์ถœ).
  alert( char ); // t, e, s, t๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ถœ๋ ฅ๋จ
}

โ€‹

Map๊ณผ Set ์ž๋ฃŒํ˜•๋„ ์ดํ„ฐ๋Ÿฌ๋ธ”

๋งต๊ณผ ์…‹์€ ์—„๋ฐ€ํžˆ ๋…๋ฆฌ๋œ ์ž๋ฃŒํ˜•์ด์ง€ ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  for..of๋ฌธ๊ณผ ๋™์ž‘ํ•˜๋Š” ์ด์œ ๋Š” ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ์ดํ„ฐ๋Ÿฌ๋ธ” ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๊ธฐ ๋–„๋ฌธ์ด๋‹ค.

๋˜ํ•œ ์ž์ฒด์ ์œผ๋กœ ์ž์ฒด ๋‚ด์žฅ forEach()๋ฉ”์„œ๋“œ๋ฅผ ์ง€์›ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

const set = new Set([1,2,3])
for (cosnt a of set) console.log(a) // 1,2,3
const map = new Map([['a',1],['b',2],['c',3]]);
// Map(3) {"a" => 1, "b" => 2, "c" => 3}

const iter = map[Symbol.itertator](); // ์‹ฌ๋ณผ.์ดํ„ฐ๋ ˆ์ดํ„ฐ๊ฐ€ ์ž์ฒด ๋‚ด์žฅ๋˜์—ˆ๊ธฐ์— ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด
iter.next();
// {value: Array(2), done: false}


for(const a of map)
    console.log(a); // ['a',1],['b',2],['c',3]

 

์˜ˆ์‹œ)

: Map์ž๋ฃŒํ˜• ๊ฐ•์˜๊ธ€์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃฌ๋‹ค.

 

map.keys()

- value์— key ๋งŒ ์žˆ๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜. (์ˆœํšŒ ๊ฐ€๋Šฅ)

map.values()

- values์— map์˜ valuse๋งŒ ์žˆ๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋ฐ˜ํ™˜

map.entries()

- key ์™€ value๊ฐ€ ์žˆ๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜

map.keys() // MapIterator {"a", "b", "c"}
 

[JS] ๐Ÿ“š ์ž๋ฃŒํ˜• Map ๐Ÿšฉ ์ •๋ฆฌ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์ด๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. โ€‹๊ฐ์ฒด – ํ‚ค๊ฐ€ ์žˆ๋Š” ์ปฌ๋ ‰์…˜์„ ์ €์žฅํ•จ ๋ฐฐ์—ด – ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์ปฌ๋ ‰์…˜์„ ์ €์žฅํ•จ โ€‹ํ•˜์ง€๋งŒ ํ˜„์‹ค ์„ธ๊ณ„๋ฅผ ๋ฐ˜์˜ํ•˜๊ธฐ์—” ์ด ๋‘ ์ž๋ฃŒ๊ตฌ

inpa.tistory.com


Reference

https://ko.javascript.info/iterable 

https://pks2974.medium.com/javascript%EC%99%80-iterator-cdee90b11c0f 

โ€‹