* Generator: ํจ์์ ์คํ์ ์ค๊ฐ์ ๋ฉ์ท๋ค๊ฐ ์ฌ๊ฐํ ์ ์๋ ๊ธฐ๋ฅ. function ์์ *์ ์ฐ๊ณ ๋ด๋ถ์ yield ํค์๋ ์ฌ์ฉํ๋๋ฐ yield ์์ ํจ์ ์คํ์ ๋ฉ์ถ ์ ์์. Generator ํจ์๋ฅผ ์คํํ๋ฉด generator์ ๊ฐ์ฒด๊ฐ ๋ฐํ๋จ.
์ ๋๋ ์ดํฐ๋ ๋ค๋ฅธ ์์ ํ๋ค๊ฐ ๋ค์ ๋์์์ next() ํด์ฃผ๋ฉด ์งํ์ด ๋ฉ์ท๋ ๋ถ๋ถ๋ถํฐ ์ด์ด์ ์คํ
- generator ๊ฐ์ฒด๋ next(), return(), throw() ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์
* next๋ฅผ ํธ์ถํ๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด yield 1์ ๋ง๋ ๋ ๊น์ง ์คํ๋๊ณ ๋ฐ์ดํฐ ๊ฐ์ฒด ๋ฐํ.
function* fn(){
console.log(1);
yield 1;
console.log(2);
yield 2;
console.log(3);
console.log(4);
yield 3;
return "finish";
}
const a = fn();
//a โถ fn {<suspended>}
๋ฐํ๋ ๊ฐ์ฒด๋ value์ done ํ๋กํผํฐ
- value: yield ์์ ์๋ ๊ฐ. ๋ง์ฝ ๊ฐ์ ์๋ตํ ์ undefined๋ก ๋ธ
- done: ํจ์ ์ฝ๋์ ์ข ๋ฃ๋ฅผ ๋ํ๋. ๋๋ฌ์ผ๋ฉด true, ์๋๋ฉด false.
* return(): ์คํํ๋ค๊ฐ returen ๋ฉ์๋ ํธ์ถ ์ ๊ทธ ์ฆ์ done ์์ฑ๊ฐ์ด true๊ฐ ๋จ. ์ดํ next๋ฅผ ์คํํ์ฌ๋ value๊ฐ์ ์ป์ ์ ์๊ณ true๋ก ๋ํ๋จ.
*throw();: return๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก done์ true๋ก ๋ฐ๊ฟ
- iterable: Symbol.iterator ๋ฉ์๋๊ฐ ๊ตฌํ๋์ด ์์ด์ผ ํ๋ฉฐ iterator๋ฅผ ๋ฐํํด์ผํจ
โ iterator: next ๋ฉ์๋๋ฅผ ๊ฐ์ง๋๋ฐ next ๋ฉ์๋๋ value์ done ์์ฑ์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ณ ์์ ์๋ฃ ํ done์ true๊ฐ ๋จ.
๋ฐฐ์ด์ Symbol.iterator ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ์ด ๋ฉ์๋๊ฐ ๋ฐํธ๋ํ๋ ๊ฐ์ด iterator์ด๋ฏ๋ก iterable ํ๋ค๊ณ ํ ์ ์์
=> ๋ฐฐ์ด์ ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด.
๋ํ for of๋ฅผ ์ด์ฉํด ์ํ๋ ๊ฐ๋ฅ
๋ฌธ์์ด๋ ํด๋นํจ
- next()๋ ์ธ๋ถ๋ก๋ถํฐ ๊ฐ์ ์ ๋ฌ๋ฐ์์๋ ์์
function* fn(){
const num1 = yield "์ฒซ๋ฒ์งธ ์ซ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์";
console.log(num1);
const num2 = yield "๋๋ฒ์งธ ์ซ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์";
console.log(num2);
return num1 + num2;
}
const a = fn();
- ๊ฐ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ง ์์. ํ์ํ ์๊ฐ์๋ง ๊ฐ์ ์ฐ์ฐํด์ ์ฃผ๊ธฐ ๋๋ฌธ์ ํจ์จ์ . ๊ทธ๋์ while(true)๋ฅผ ์ฌ์ฉํด ๋ฌดํ๋ฐ๋ณต ๊ฐ๋ฅ.
function* fn(){
let index = 0;
while(true){
yield index++;
}
}
const a = fn();
- yield*๋ฅผ ์ด์ฉ. ๋ฐ๋ณต๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์ฌ ์ ์์.
function* gen1(){
yield "H";
yield "i";
yield "!";
}
function* gen2(){
yield "hi";
yield* gen1();
yield "XD";
}
'js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
javascript async, await (0) | 2022.11.01 |
---|---|
javascript ํ๋ก๋ฏธ์ค (Promise) (0) | 2022.11.01 |
javascript ํด๋์ค(class) (0) | 2022.11.01 |
javascript ์์, ํ๋กํ ํ์ (Prototype) (0) | 2022.10.31 |
javascript ๋ฉ์๋ call, apply, bind (0) | 2022.10.31 |