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