Generator
제너레이터란?
직접 구현하는 것 보다 이터레이션 프로토콜을 준수하여 이터러블을 생성하는 함수이다.
비동기 처리에 유용하게 쓰인다고 한다.
// 무한 이터러블을 생성하는 제너레이터 함수 function* infinityFunctionByGenerator() { let i = 0; while (true) { yield ++i; } } for (const n of infinityFunctionByGenerator()) { if (n > 5) break; console.log(n); }
함수 코드 블록의 실행을 일시적으로 중지했다가, 원하는 시점에서 재시작을 할 수 있는 특별한 함수이다.
//각 호출 지점별로 간단하게 제네레이터를 정의해본다. function* counter() { console.log('첫번째 호출'); yield 1; console.log('두번째 호출'); yield 2; console.log('세번째 호출'); } // 일반 함수로 호출하면 iterable const generatorObj = counter(); // next() 호출시 iterator console.log(generatorObj.next()); console.log(generatorObj.next()); console.log(generatorObj.next());
고로 제너레이터는 iterable 이며, iterator 이다.
제너레이터 함수의 정의
function* 키워드를 선언하여 사용하고, 하나 이상의 yield 문을 포함한다.
다음 코드는 제너레이터로 선언하는 다양한 함수선언문, 함수표현식, 메서드, 클래스 내부의 메서드 정의 방법이다.
// 제너레이터 함수 선언문 function* genDecFunc() { yield 1; } let generatorObj = genDecFunc(); // 제너레이터 함수 표현식 const genExpFunc = function* () { yield 1; }; generatorObj = genExpFunc(); // 제너레이터 메소드 const obj = { * generatorObjMethod() { yield 1; } }; generatorObj = obj.generatorObjMethod(); // 제너레이터 클래스 메소드 class MyClass { * generatorClsMethod() { yield 1; } } const myClass = new MyClass(); generatorObj = myClass.generatorClsMethod();
Last updated
Was this helpful?