Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 제너레이터(Generator) 함수란 무엇일까요?

제너레이터(Generator) 함수는 함수의 실행 도중에 코드를 멈추고, 이후 필요한 시점에 다시 재개할 수 있는 특별한 함수입니다. 즉, 함수가 종료된 위치를 기억했다가 나중에 그 지점부터 이어서 실행할 수 있습니다.

이러한 특성 덕분에 제너레이터는 코드의 흐름 제어(flow control)를 유연하게 관리하는 데 활용됩니다. 또한 실행을 언제든 일시 중지할 수 있기 때문에 비동기 작업을 손쉽게 취소하거나 조절할 수 있다는 장점도 있습니다.

제너레이터 함수의 문법

제너레이터 함수를 선언할 때는 function 키워드 뒤에 반드시 별표(*)를 붙여야 합니다. 별표는 아래 세 가지 방식 중 어느 것이든 자유롭게 사용할 수 있습니다.

function *myFunction() {}
// 또는
function* myFunction() {}
// 또는
function*myFunction() {}

제너레이터 함수 사용 예제

다음 예제는 제너레이터 함수를 활용해 숫자를 하나씩 생성하는 방법을 보여줍니다.

<html>
   <body>
      <script>
         function* display() {
            var num = 1;
            while (num < 5)
            yield num++;
         }
         var myGenerator = display();

         document.write(myGenerator.next().value);
         document.write("<br>"+myGenerator.next().value);
         document.write("<br>"+myGenerator.next().value);
         document.write("<br>"+myGenerator.next().value);
         document.write("<br>"+myGenerator.next().value);
      </script>
   </body>
</html>

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

1
2
3
4
undefined

코드 설명

예제에서 yield 키워드는 함수의 실행을 잠시 멈추고 값을 반환하는 역할을 합니다. 제너레이터 객체에 대해 next() 메서드를 호출할 때마다 yield 지점까지 코드가 실행된 후 멈추고, 그 결과값을 반환합니다.

즉, next()를 호출할 때마다 1부터 4까지의 값이 순차적으로 출력되며, 더 이상 반환할 값이 없으면 undefined가 반환됩니다. 이처럼 제너레이터는 필요한 시점에 값을 하나씩 꺼내 쓸 수 있어 메모리 효율성이 뛰어나고, 무한 시퀀스나 비동기 흐름 제어 등 다양한 상황에서 유용하게 활용됩니다.