Iteration์ด๋?
Iteration์ ๋ป ๊ทธ๋๋ก ๋ฐ๋ณต์ด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ํ๋ฅผ ํตํด ๊ฐ ์์์ ์ ๊ทผํ๊ธฐ ์ํด์ iteration ์ธํฐํ์ด์ค์ ์ํด ์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
iteration ์ธํฐํ์ด์ค์๋ ์๋์ ๊ฐ์ ์ธํฐํ์ด์ค๊ฐ ์ํด ์๋ค.
- iterable ์ธํฐํ์ด์ค
- iterator ์ธํฐํ์ด์ค
- iteratorResult ์ธํฐํ์ด์ค
- asyncIterable ์ธํฐํ์ด์ค
- asyncIterator ์ธํฐํ์ด์ค
ย
Iterable ์ธํฐํ์ด์ค
iterable ์ธํฐํ์ด์ค๋
@@iterator
๋ฅผ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉํ๋ ํจ์๋ฅผ ํฌํจํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ๋๋ค.์ด๋ฏธ ์ ์๋ Symbol์ธ
Symbol.iterator
๋ฅผ ํค๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.์ด ํจ์๋ iterator ์ธํฐํ์ด์ค๋ฅผ ์ค์ํ iterator ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผ ํ๋ค.
ย
Iterator ์ธํฐํ์ด์ค
iterator ์ธํฐํ์ด์ค์๋
next
๋ฅผ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉํ๋ ํจ์๋ฅผ ๋ฐ๋์ ํฌํจํ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค.์ด ํจ์๋ iteratorResult ์ธํฐํ์ด์ค๋ฅผ ์ค์ํ๋ iteratorResult ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผ ํ๋ค.
ย
ํ์๋ ์๋์ง๋ง, ์์
next
ํจ์์ ๋ฐํ๊ฐ์ด done
๊ฐ์ด true
์ธ iteratorResult ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ, ์ดํ ํธ์ถ๋๋ next
ํจ์์ ๋ฐํ๊ฐ์ผ๋ก done
๊ฐ์ด true
์ธ iteratorResult ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํ๋ฉด ๋๋ค.ย
์ ํ์ฌํญ์ผ๋ก
return
๊ณผ throw
๋ฅผ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉํ๋ ํจ์๋ฅผ ํฌํจํด๋ ๋๋ค.๋ ํจ์๋ iteratorResult ์ธํฐํ์ด์ค๋ฅผ ์ค์ํ๋ iteratorResult ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผ ํ๋ค.
ย
return
ํจ์๋ ์ ํ์ ์ผ๋ก ์ธ์์ ๊ฐ์ ๋ฐ์ iteratorResult ๊ฐ์ฒด์ value
ํ๋กํผํฐ์ ํ ๋นํ๊ณ done
ํ๋กํผํฐ์๋ true
๋ฅผ ํ ๋นํด์ iteratorResult ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉด ๋๋ค.return
ํจ์๋ฅผ ํธ์ถํ๋ฉด ๋ ์ด์ next
ํจ์๋ฅผ ํธ์ถํ์ง ์๋๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.ย
throw
ํจ์๋ ์ ํ์ ์ผ๋ก ์ธ์์ ๊ฐ์ ๋ฐ์ done
ํ๋กํผํฐ์๋ true
๋ฅผ ํ ๋นํด์ iteratorResult ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉด ๋๋ค.์ธ์์๋ ์ผ๋ฐ์ ์ผ๋ก
Error
์ธ์คํด์ค๋ฅผ ํ ๋นํ๋ค.ย
IteratorResult ์ธํฐํ์ด์ค
iteratorResult ์ธํฐํ์ด์ค์๋ ๋ถ๋ฆฌ์ธ ๊ฐ์ ๊ฐ์ง๋
done
ํ๋กํผํฐ์ ECMAScript language ๊ฐ์ ๊ฐ์ง๋ value
ํ๋กํผํฐ๋ฅผ ํฌํจํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ๋๋ค.ECMAScript language ๊ฐ์๋ Undefined, Null, Boolean, String, Symbol, Number, BigInt, ๊ทธ๋ฆฌ๊ณ Object๊ฐ ์ํด ์๋ค.
ย
AsyncIterable ์ธํฐํ์ด์ค
asyncIterable ์ธํฐํ์ด์ค๋
@@asyncIterator
๋ฅผ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉํ๋ ํจ์๋ฅผ ํฌํจํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ๋๋ค.์ด ํจ์๋ asyncIterator ์ธํฐํ์ด์ค๋ฅผ ์ค์ํ asyncIterator ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผ ํ๋ค.
asyncIterator ์ธํฐํ์ด์ค๋ฅผ ์ค์ํ iterable ๊ฐ์ฒด์ ๋ฐ๋ณต ์์
์
for await (let item of iterable)
ย ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด ์ฒ๋ฆฌํด์ผ ํ๋ค.ย
AsyncIterator ์ธํฐํ์ด์ค
asyncIterator ์ธํฐํ์ด์ค๋
next
๋ฅผ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉํ๋ ํจ์๋ฅผ ํฌํจํ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค.์ด ํจ์๋ iteratorResult ์ธํฐํ์ด์ค๋ฅผ ์ค์ํ๋ iteratorResult ๊ฐ์ฒด๋ฅผ ํ๋ก๋ฏธ์ค๋ก ๊ฐ์ธ์ ๋ฐํํด์ผ ํ๋ค.
ํ์๋ ์๋์ง๋ง, ์์
next
ํจ์์ ๋ฐํ๊ฐ์ด done
๊ฐ์ด true
์ธ iteratorResult ๊ฐ์ฒด๋ฅผ ๊ฐ์ผ ํ๋ก๋ฏธ์ค์ธ ๊ฒฝ์ฐ, ์ดํ ํธ์ถ๋๋ next
ํจ์์ ๋ฐํ๊ฐ์ผ๋ก done
๊ฐ์ด true
์ธ iteratorResult ๊ฐ์ฒด๋ฅผ ๊ฐ์ผ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํ๋ฉด ๋๋ค.ย
์ ํ์ฌํญ์ผ๋ก
return
๊ณผ throw
๋ฅผ ํ๋กํผํฐ ํค๋ก ์ฌ์ฉํ๋ ํจ์๋ฅผ ํฌํจํด๋ ๋๋ค.๋ ํจ์๋ iteratorResult ์ธํฐํ์ด์ค๋ฅผ ์ค์ํ๋ ํ๋ก๋ฏธ์ค๋ก ๊ฐ์ผ iteratorResult ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผ ํ๋ค.
ย