들어가며
“자바스크립트 제너레이터”는 반복 가능한 데이터 시퀀스를 생성하는 강력한 방법을 제공합니다.
시퀀스를 생성한다는 의미는 배열과 같은 데이터를 생성하고 for문으로 돌리는 작업을 제너레이터를 사용해서 구현 할 수 있는 건데요. 배열과 for문으로 구현 가능하다면 제너레이터는 어떤 이점이 있길래 사용하는 걸까요?
이번 포스트에서는 “제너레이터”가 무엇인지, 자바스크립트에서 어떻게 작동하고 사용할 수 있는지를 정리해보았습니다.
자바스크립트 제너레이터 란 무엇입니까?
JavaScript 제너레이터는 실행을 일시 중지하고 재개할 수 있는 특수 함수로, 시간이 지남에 따라 일련의 값을 생성할 수 있습니다.
실행이 완료되고 단일 값을 반환하는 일반 함수와 달리 제너레이터는 한 번에 하나씩 여러 값을 생성할 수 있으므로 지연 평가와 효율적인 메모리 사용을 가능하게 만들어 줍니다.
제너레이터 함수 만들기
제너레이터 함수를 정의하려면 함수가 제너레이터임을 JavaScript에 알려주는 function*
구문을 사용합니다.
제너레이터 함수 내에서 ‘yield
‘ 키워드를 사용하여 일련의 값을 생성합니다.
다음은 무한한 피보나치 수열을 생성하는 제너레이터 함수의 간단한 예입니다.
function* fibonacci() {
let prev = 0, curr = 1;
while (true) {
yield curr;
[prev, curr] = [curr, prev + curr];
}
}
제너레이터 함수를 정의한 후에는 이를 사용하여 for…of
루프를 사용하거나 제너레이터에서 next()
메서드를 수동으로 호출하여 값을 생성할 수 있습니다.
‘fibonacci()’ 제너레이터를 사용하여 처음 10개의 피보나치 수를 생성하는 방법은 다음과 같습니다.
const gen = fibonacci();
for (let i = 0; i < 10; i++) {
console.log(gen.next().value);
}
마치며
파이썬과 유사하게 함수의 반환을 yield로 합니다. 또한 함수를 변수로 받아 제너레이터를 생성하는 것도 파이썬과 유사합니다.
마지막으로 next()를 이용해서 제너레이터를 호출하는 것도 유사합니다.
한 번 익혀둔다면 파이썬과 자바스크립트 모두에서 어렵지 않게 제너레이터를 활용할 수 있을 것 같습니다.