제너레이터 (Generator)


ES6 에서 도입된 제너레이터(Generator) 함수는 이터러블과 이터레이터 프로토콜을 준수하는 제너레이터 객체를 반환하는 함수이다.

기본 구조

제너레이터 함수의 기본 구조는 함수 키워드인 function 의 뒤에 * 를 추가하여 생성하고 yield 를 통해 값을 반환한다.
 
제너레이터 함수는 이터러블과 이터레이터의 프로토콜을 준수하는 제너레이터 객체를 반환한다.
 
제너레이터 객체는 이터레이터도 반환하기 때문에 next() 를 통해 value, done 프로퍼티를 갖는 이터레이터 리절트(iterator result) 를 반환한다. 여기서 valueyield 의 값이고 done 은 종료 여부에 대한 값이다.
 
return() 메서드를 통해서 제너레이터를 종료할 수 있다. 인자값으로 value 값을 전달하면 해당 값을 value 값에 적용한 뒤에 종료시킬 수 있다. (제너레이터에서 retrun 문이 동작하는 것처럼 동작)
 
throw() 메서드를 통해 제너레이터에 대한 예외 처리를 할 수 있다.

순회 가능

제너레이터 객체는 이터러블 객체이기 때문에 for…of 문을 통해 순회가 가능하다.

제너레이터 컴포지션

yield* 키워드를 통해 다른 제너레이터나 이터러블 객체에 yield 를 위임할 수 있다.

next() 메서드의 인수값

next() 메서드에 인수를 추가하면 해당 값이 이전 yield 값으로 적용된다.
 

 
참고