[JavaScript] 제너레이터(Generator)
제너레이터(Generator)
제너레이터는 중단점이있는 함수이다. 부가적으로 더 말해보면 이터레이터이자 이터러블을 생성하는 함수이다.
이터러블이란 순회 가능한 객체이다.
function *gen() {yield 1;yield 2;yield 3;return 100;}let iter = gen();console.log(iter[Symbol.iterator]() === iter); // trueconsole.log(iter.next()); // {value: 1, done: false}console.log(iter.next()); // {value: 2, done: false}console.log(iter.next()); // {value: 3, done: false}console.log(iter.next()); // {value: 100, done: true}function *gen() {yield 1;yield 2;yield 3;return 100;}let iter = gen();for (const num of iter) {console.log(num)// 1,2,3}
제너레이터 사용법은 일반함수에서 앞에 *을 붙여서 제너레이터 함수를 만든다.
이렇게 작성한 제너레이터는 이터레이터를 반환한다. (순회 가능한 값?)
이렇게 반환된 이터레이터는 next() 메서드를 호출하여 한 단계식 순회하며 객체를 반환한다.
제너레이터에서는 중단점을 yield로 구분한다. 이러한 yield는 중단점이면서 값을 반환하기도 한다.
제너레이터 함수를통해 반환된 이터레이터는 이터러블이기도 하다.
제너레이터를 통해 반환된 이터레이터는 [Symbol.iterator] 메서드를 가지고있고 iter[Symbol.iterator] 메서드의 실행결과는 자기자신이다.
그러므로 제너레이터는 이터레이터를 반환하는 함수이다.
제너레이터 함수의 실행결과가 이터러블이자 이터레이터이기 때문에 for...of 문으로 순회도 가능하다.
그리고 제너레이터는 next()로 값을 한단계식 출력할 수 있지만 for...of 문으로 순회시에는 return값은 생략되고 순회하며 값을 반환한다.
자바스크립트에서는 어떠한 값이던 이터러블이면 순회할 수 있다.
그렇게 때문에 제너레이터를 이용하여 순회할 수 있는 값을 만들 수 있기때문에 자바스크립트에서는 이러한 제너레이터를 통해서 어떠한 값이나 상태, 문장도 순회할 수 있는 이터러블로 쉽게 만들 수 있다.
마지막으로 무한 반복문을 사용하여도 제너레이터 함수를 사용하면 중단하면서 값을 반환할 수 있다.
댓글
댓글 쓰기