[JS] 제너레이터 (Generator)

이한솔·2023년 11월 22일
0

JavaScript

목록 보기
11/11

제너레이터 (Generator)

: 자바스크립트의 Generator는 함수의 실행을 일시 중단하고 재개할 수 있는 특수한 종류의 함수다. Generator는 'function*' 문법을 사용하여 정의되며, 함수 내에서 'yield' 키워드를 사용하여 값을 내보내고 함수 실행을 일시 중단할 수 있다. : 제너레이터 함수는 호출되면 즉시 실행되지 않고, 대신에 이터레이터(Iterator)를 반환한다. 제너레이터는 이터레이터 프로토콜 따르므로, next 메서드를 사용하여 값을 받아올 수 있다. 'next' 메서드를 호출할 때마다 제너레이터 함수의 실행은 일시 중단된 상태에서 시작하고, yield 키워드에서 값을 내보내거나 다음 yield까지 실행을 진행한다.
function* myGenerator() {
  yield 1;
  yield 2;
  yield 3;
}

const generator = myGenerator();

console.log(generator.next()); // { value: 1, done: false }
console.log(generator.next()); // { value: 2, done: false }
console.log(generator.next()); // { value: 3, done: false }
console.log(generator.next()); // { value: undefined, done: true }

제너레이터 함수는 순회 가능한 객체를 생성하므로 for...of 루프나 스프레드 연산자를 통해 값을 순회할 수 있다.

제너레이터는 주로 비동기 코드를 작성하거나 무한한 시퀀스를 생성하는데 사용된다. 예로 들어, 비동기적인 코드에서 제너레이터를 사용하면 Promise를 더 직관적으로 작성할 수 있다.

제너레이터 함수와 일반 함수의 차이점

  1. 함수 실행 방식
    • 일반 함수 : 일반 함수는 호출되면 함수 블록 내부의 코드를 순차적으로 실행한다. 함수 실행 중에는 다른 코드나 이벤트 처리가 중간에 끼어들지 않고, 함수의 실행이 완료될 때까지 호출자에게 제어권을 넘기지 않는다.
    • 제너레이터 함수 : 제너레이터 함수는 호출되어도 즉시 실행되지 않고, 대신 이터레이터를 반환하고, 함수의 실행은 중간에 일시 중단되고 재개될 수 있다. yield 키워드를 토해 값을 내보내며, 함수 실행 중에는 외부에서 다시 호출되지 않는다.
  2. 함수의 반환 값
    • 일반 함수 : 일반 함수는 return 키워드를 사용하여 값을 반환하고, 함수가 실행을 완료하면 반환값이 호출자에게 전달된다.
    • 제너레이터 함수 : 제너레이터 함수는 yield 키워드를 사용하여 값을 내보내지만, return 키워드도 사용할수 있다. 그러나 return은 제너레이터 함수의 실행을 완전히 종료하며, 이후에 yield로 값을 내보낼 수 없다.
  3. 이터레이터 프로토콜
    • 일반 함수 : 일반 함수는 이터레이터 프로토콜을 따르지 않습니다. 따라서 for...of 루프나 스프레드 연산자를 통한 순회가 불가능하다.
    • 제너레이터 함수 : 제너레이터 함수는 이터레이터 프로토콜을 따르므로, for...of 루프나 스프레드 연산자를 사용하여 값을 순회할 수 있다.
  4. 상태 저장
    • 일반 함수 : 일반함수는 호출이 완료되면 지역 변수 등의 상태는 사라지지만, 클로저를 사용하면 일부 상태를 보존할 수 있다.
    • 제너레이터 함수 : 제너레이터 함수는 상태를 보존하여 일시 중단된 위치에서 실행을 재개할 수 았다. 따라서 제너레이터 함수는 루프의 상태를 유지하거나 비동기 작업의 중간 상태를 저장하는데 유용하다.
profile
개인 공부용

0개의 댓글