상세 컨텐츠

본문 제목

JavaScript :: 제너레이터

JavaScript

by 비오스터딩 2020. 12. 15. 11:13

본문

 

제너레이터 함수는 일반 함수와 같이 함수의 코드 블록을 한 번에 실행하지 않고 함수 코드 블록의 실행을 일시 중지했다가 필요한 시점에 재시작할 수 있는 특수한 함수이다. 비동기 처리에 유용하게 사용된다.

제너레이터는 이터러블 이면서 동시에 이터레이터인 객체이다.

 

제너레이터 함수 정의 및 호출

제너레이터 함수는  function*  로 선언하며, 하나 이상의  yield 를 가진다.

제너레이터는 next 메서드를 소유한다. next 메서드를 호출하면, yield를 사용한 지점까지 함수를 실행하고 멈췄다가, 그 다음 호출 시 다음 yield 지점까지 실행한다. (yield는 break point와 같다.)

 

 

 

 

 

 

 

 

 

일반 함수를 호출하면 return문을 반환하지만,

제너레이터 함수를 호출하면 제너레이터를 반환한다.

 

.next() 호출 시 첫번째 yeild 까지 실행되며,

value와 done 프로퍼티를 갖는 이터레이터 리절트 객체를 반환한다.

 

yield 2.5;

로 설정했을 경우, value값에 2.5를 반환한다.

 

 

 

 

함수가 모두 실행되고 나면 done:true를 반환한다.

 

 

 

 

무한 이터러블을 생성하는 제너레이터 함수

 

 

 

 

while 반복문을 사용하여 무한 반복문을 만들었다.

제너레이터함수가 아닌 경우 무한반복되므로 오류가발생한다.

 

 

 

 

 

next 메서드를 사용하여 호출할 때마다,

i가 1씩 증가하는 것을 볼 수 있다.

제너레이터 함수를 사용하면 비동기 작업을 동기작업처럼 구현할 수 있다. 즉 비동기 처리 함수가 처리 결과를 반환하도록 구현할 수 있다.

이런 방면에서 yield는 async의 await과도 유사하다.

 

 

 

 

 

 

 

 

 

 

 

 

 

제너레이터로 액션 모니터링 해보기

 

 

 

 

 

 

참고
- https://poiemaweb.com/es6-generator
-https://react.vlpt.us/redux-middleware/10-redux-saga.html
반응형

관련글 더보기

댓글 영역