질문 37 · 실전 면접 답변
제너레이터는 실행을 어떻게 중단하고 재개하나요?
이렇게 답해 보세요 (핵심 답변)
function*으로 정의하는 제너레이터 함수는 호출 시 본문을 바로 끝까지 실행하지 않고 제너레이터 객체를 반환합니다. 이 객체의 next()를 호출할 때마다 다음 yield 문을 만날 때까지만 실행되어 { value, done }을 돌려주고 그 자리에서 일시 중단됩니다. 다시 next()를 부르면 멈췄던 지점과 지역 변수 상태를 유지한 채 실행을 재개하므로, 대량의 값을 미리 배열로 만들지 않고 필요할 때마다 하나씩 생산하는 지연(lazy) 순회에 유용합니다.
함께 설명하면 좋은 이유 (꼬리질문 대비)
- 제너레이터 객체는 next()를 가진 iterator이면서 동시에 Symbol.iterator를 구현한 iterable이어서 for...of나 전개 연산자에 바로 쓸 수 있습니다.
- 이미 끝까지 순회해 done이 true가 된 제너레이터 객체는 다시 처음부터 값을 내어주지 않으므로 재순회하려면 제너레이터 함수를 새로 호출해야 합니다.
면접에서 자주 하는 실수
일반 동기 제너레이터(function*)가 실행을 멈췄다 재개한다고 해서 자동으로 비동기 작업을 수행하거나 별도 스레드로 동작하는 것은 아닙니다.
원리와 예제까지 읽기
공식 참고 자료
질문 목록 출처 ↗ · 원본 37번을 바탕으로 질문과 답변을 새로 정리했습니다.