학습 공간 개념 · 판단 · 실험

Fanta Lab

질문 37 · 실전 면접 답변

제너레이터는 실행을 어떻게 중단하고 재개하나요?

이렇게 답해 보세요 (핵심 답변)

function*으로 정의하는 제너레이터 함수는 호출 시 본문을 바로 끝까지 실행하지 않고 제너레이터 객체를 반환합니다. 이 객체의 next()를 호출할 때마다 다음 yield 문을 만날 때까지만 실행되어 { value, done }을 돌려주고 그 자리에서 일시 중단됩니다. 다시 next()를 부르면 멈췄던 지점과 지역 변수 상태를 유지한 채 실행을 재개하므로, 대량의 값을 미리 배열로 만들지 않고 필요할 때마다 하나씩 생산하는 지연(lazy) 순회에 유용합니다.

함께 설명하면 좋은 이유 (꼬리질문 대비)

  1. 제너레이터 객체는 next()를 가진 iterator이면서 동시에 Symbol.iterator를 구현한 iterable이어서 for...of나 전개 연산자에 바로 쓸 수 있습니다.
  2. 이미 끝까지 순회해 done이 true가 된 제너레이터 객체는 다시 처음부터 값을 내어주지 않으므로 재순회하려면 제너레이터 함수를 새로 호출해야 합니다.

면접에서 자주 하는 실수

일반 동기 제너레이터(function*)가 실행을 멈췄다 재개한다고 해서 자동으로 비동기 작업을 수행하거나 별도 스레드로 동작하는 것은 아닙니다.

원리와 예제까지 읽기

공식 참고 자료

질문 목록 출처 ↗ · 원본 37번을 바탕으로 질문과 답변을 새로 정리했습니다.

← JavaScript