자바스크립트 제너레이터 함수 (Generator Functions)

제너레이터 함수는 자바스크립트에서 이터레이터(iterator)와 함께 많이 사용되는 기능입니다. 이 기능은 함수를 선언할 때 function* 키워드를 사용하여 정의합니다.

function* myGenerator() {
  yield 1;
  yield 2;
  yield 3;
}

위의 예시에서 function* 키워드를 사용하여 myGenerator라는 제너레이터 함수를 선언하였습니다. 제너레이터 함수는 yield 키워드를 사용하여 값을 반환하거나 일시적으로 함수를 일시 중단시킬 수 있습니다.

제너레이터 함수로 생성한 객체는 이터레이터이기 때문에, next 메서드를 사용하여 함수의 실행을 제어할 수 있습니다.

const generatorObj = myGenerator();

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

next 메서드를 호출하면, 제너레이터 함수가 일시 중단한 지점부터 다음 yield 키워드까지 실행됩니다. 반환값은 valuedone 속성을 가지는 객체로 나타납니다. valueyield 키워드에 의해 반환된 값이고, done은 함수가 더 이상 값을 반환하지 않을 때 true가 됩니다.

제너레이터 함수는 여러 장점을 가지고 있습니다. 첫째, 다른 함수와 달리 일시 중단이 가능하기 때문에, 복잡한 연산을 단계별로 분할하여 실행할 수 있습니다. 둘째, 제너레이터 함수는 무한한 데이터 스트림을 제공할 수 있다는 점에서 유용합니다. 셋째, 이터레이터의 동작 방식을 쉽게 이해하고 사용할 수 있어서 유지보수 및 디버깅이 편리합니다.

제너레이터 함수는 ES6(ECMAScript 2015)부터 도입된 기능이며, 자바스크립트에서 점점 더 많이 사용되고 있는 중요한 개념입니다. 함수의 일시 중단과 값을 반환하는 기능을 적절히 이용하면, 성능이나 가독성이 개선되는 경우가 많습니다.

제너레이터 함수의 문법과 사용법을 익혀서 유용한 자바스크립트 프로그램 개발에 활용해 보세요.