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