Home JS[iterable, iterator]
Post
Cancel

JS[iterable, iterator]

πŸ“Œ iterable, iterator

μ΄ν„°λŸ¬λΈ”μ„ [for…of], [μ „κ°œ μ—°μ‚°μž], [비ꡬ쑰화] ..λ“±, μ΄ν„°λŸ¬λΈ”μ΄λ‚˜ μ΄ν„°λ ˆμ΄ν„° ν”„λ‘œν† μ½œμ„ λ”°λ₯΄λŠ” μ—°μ‚°μžλ“€κ³Ό ν•¨κ»˜ λ™μž‘ν•˜λ„λ‘ ν•˜λŠ” μ•½μ†λœ κ·œμ•½μ„ μ˜λ―Έν•œλ‹€.

μ΄ν„°λŸ¬λΈ”μ€ μ΄ν„°λŸ¬λΈ” κ·œμ•½μ„ λ”°λ₯΄λŠ” 객체

✏️ iterable

μ΄ν„°λ ˆμ΄ν„°λ₯Ό λ¦¬ν„΄ν•˜λŠ” Symbol.iterator λ©”μ„œλ“œλ₯Ό κ°€μ§„ 객체

λ°°μ—΄μ˜ 경우 Array.prototype 의 Symbol.iterator λ₯Ό 상속받기 λ•Œλ¬Έμ— μ΄ν„°λŸ¬λΈ”μž„

✏️ iterator

{value : κ°’ , done : true/false} ν˜•νƒœμ˜ μ΄ν„°λ ˆμ΄ν„° 객체λ₯Ό λ¦¬ν„΄ν•˜λŠ” next() λ©”μ„œλ“œλ₯Ό κ°€μ§„ 객체.

next λ©”μ„œλ“œλ‘œ μˆœν™˜ ν•  수 μžˆλŠ” 객체닀. Symbol.iterator μ•ˆμ— μ •μ˜ λ˜μ–΄μžˆλ‹€.

next() λŠ”

1
2
3
4
5
6
7
8
9
10
11
12
13
function* gen() {
  yield 1;
  yield 2;
  yield 3;
}

//{ value : κ°’ , done : 값이 μ—†μœΌλ©΄ true}

const g = gen(); // "Generator { }"
g.next(); // "Object { value: 1, done: false }"
g.next(); // "Object { value: 2, done: false }"
g.next(); // "Object { value: 3, done: false }"
g.next(); // "Object { value: undefined, done: true }"

ν˜•νƒœλ‘œ 이루어짐

iterable => Symbol.iterator => iteratorκ°€ => next()둜 μˆœν™˜κ°€λŠ₯

ν•œλ§ˆλ””λ‘œ iterable은 λ°˜λ³΅κ°€λŠ₯ν•œ 객체이고 iteratorλŠ” κ·Έμ•ˆμ˜ λ°˜λ³΅μ„ μˆ˜ν–‰ν•˜λŠ” λ©”μ„œλ“œλΌκ³  μƒκ°ν•˜λ©΄ 될거같닀.

This post is licensed under CC BY 4.0 by the author.