generator 알아보기
Updated:
제너레이터
generator
제너레이터
- 일반적인 함수를 사용했을 때 예시를 보자
function normal() { console.log(1); console.log(2); console.log(3); }
- 해당 사항은 바로 실행이 되면서 1,2,3이 순차적으로 나올 것입니다. 하지만 제너레이터를 사용하면 중간에서 정지하고 싶을 경우에도 사용할 수 있습니다.
-
제너레이터 사용할 때
- yield는 중단점 역할을 함 원하는 시점에 yield를 넣으면 함수가 중단
yield*
: 별을 붙이면 iterable 형태로 사용이 가능합니다.
function* one() {
console.log(1);
console.log(2);
yield 3;
console.log(4);
yield 14;
yield* '1234'; // 별을 붙이면 iterable(반복 가능한 값)
/* yield 1,yield 2,yield 3 === yield* [1,2,3]은 동일하다 */
}
var gen = one();
gen.next(); // 1,2,{value:3,done:false}
gen.next(); // 4, {value:14, done:false}
redux-saga에서 generator가 대두되는 이유?
async-await
이전에 비동기 코드를 동기 코드처럼 사용하기 위해await
의 성향을yield
랑 비슷한 맥락이라고 보면 된다. 사실 yield가async
await
보다 더 강력한 기능이 있습니다.- 비동기를 자유자재로 컨트롤을 할 수 있기 때문에 계속 제너레이터를 사용하는 이유
- 간략히 보자면
yield
로 함수를 중단하고next
로 함수를 다시 실행하고 value
무한 반복문을 제너레이터로 컨트롤 하기
yield
가 중단점이 되기 때문에 무한 반복문을 컨트롤을 할 수 있습니다.
function* wha() {
let i = 0;
while (true) {
yield i++; // yield가 중단을 해주기 때문에 무한 반복이 되지 않음
}
}
const gen = wha();
gen.next(); // 1
gen.next(); // 2
gen.next(); // 3
gen.next(); // 4