자바스크립트 끄적끄적
자바스크립트 - 제네레이터
코딩질문자
2022. 9. 10. 21:01
728x90
제너레이터
ECMAScript 6부터 추가된 개념.
일반 함수는 하나의 값(혹은 0개의 값)만을 반환합니다.
하지만 제너레이터(generator)를 사용하면 여러 개의 값을 필요에 따라 하나씩 반환(yield)할 수 있습니다. 제너레이터와 이터러블 객체를 함께 사용하면 손쉽게 데이터 스트림을 만들 수 있습니다.
제너레이터 함수
제너레이터를 만들려면 '제너레이터 함수’라 불리는 특별한 문법 구조, function*이 필요합니다.
예시:
function* generateSequence() {
yield 1;
yield 2;
return 3;
}
제너레이터 함수는 일반 함수와 동작 방식이 다릅니다. 제너레이터 함수를 호출하면 코드가 실행되지 않고, 대신 실행을 처리하는 특별 객체, '제너레이터 객체’가 반환됩니다.
예시를 살펴봅시다.
function* generateSequence() {
yield 1;
yield 2;
return 3;
}
// '제너레이터 함수'는 '제너레이터 객체'를 생성합니다.
let generator = generateSequence();
alert(generator); // [object Generator]
함수 본문 코드는 아직 실행되지 않았습니다.
next()는 제너레이터의 주요 메서드입니다. next()를 호출하면 가장 가까운 yield <value>문을 만날 때까지 실행이 지속됩니다(value를 생략할 수도 있는데, 이 경우엔 undefined가 됩니다). 이후, yield <value>문을 만나면 실행이 멈추고 산출하고자 하는 값인 value가 바깥 코드에 반환됩니다
next()는 항상 아래 두 프로퍼티를 가진 객체를 반환합니다.
- value: 산출 값
- done: 함수 코드 실행이 끝났으면 true, 아니라면 false
728x90