생성기 - 괴상한 조각

ECMAScript 6 초안 사양은 이미 최신 JavaScript 개발자에게 많은 즐거움을 안겨주었습니다. 이전 게시물에서 몇 가지 새로운 컬렉션 클래스와 for..of 반복 루프를 다루었습니다. 이 게시물에서는 for..of 루프와 관련이 있는 생성기 함수인 생성기 함수에 관해 이야기해 보겠습니다.

생성기를 사용하는 이유와 방법을 다룬 훌륭한 자료로 이루어진 호스트가 이미 있습니다. 간단히 말해 생성기는 반복자를 만드는 특수 함수이고, 반복자는 값을 얻기 위해 호출할 수 있는 next() 메서드가 있는 객체입니다. 생성기 함수 내에서 yield 키워드는 next() 값을 제공합니다. yield를 사용하면 생성기 함수의 실행을 정지하여 next()가 다시 호출될 때까지 상태를 보존합니다. 이때 코드는 다시 시작되어 다른 값을 yield하거나 생성기 함수가 종료될 때까지 계속됩니다. 생성기 함수의 표준 사용 사례로는 몇 가지가 있습니다. 예를 들어 피보나치 수열의 숫자를 반복하는 데 사용할 수 있습니다.

기본적인 내용을 살펴보았으니, 이제 생성기 작업에 관한 몇 가지 실수 또는 '비상스러운 부분'을 다루는 JavaScript 샘플을 심층적으로 살펴보겠습니다. 이 코드에는 광범위한 주석이 포함되어 있으므로 자세히 읽기 전에 라이브 버전의 코드를 한번 사용해 보실 수 있습니다.

그렇다면 코드에서 얻은 중요한 내용은 무엇일까요?

첫째, 생성기를 구성하면 고유한 상태를 가진 고유한 반복자가 생성됩니다. 또한 동작을 제어할 수 있는 매개변수를 생성기 생성자에 전달할 수 있습니다.

둘째, 반복기의 next() 메서드를 호출할 때 매개변수를 전달할 수 있습니다. 그러면 해당 값은 이전 반복기 호출에서 yield 문의 왼쪽에 있는 항목에 할당됩니다. 이는 반복자의 출력을 변경하는 좋은 방법입니다. 여기서는 생성된 단어가 대문자인지 여부를 제어하는 데 사용합니다. 생성된 첫 번째 값에 영향을 주려면 생성기의 생성자에 대한 매개변수를 통해 실행합니다.

마지막으로 생성기는 유한 반복자 또는 무한 반복자를 생성할 수 있습니다. 무한 반복자를 사용하는 경우 yielded 값을 기반으로 하는 일종의 종말 조건이 있는지 확인하세요. 특히 for..of를 반복에 사용할 때 실수로 무한 루프가 작성되기 쉽습니다. next() 호출을 통해 유한 반복자로 작업하는 경우 반환된 객체의 .done 속성은 반복이 완료되었는지 여부를 나타냅니다.

이 샘플이 웹에서 제공되는 다른 리소스와 함께 흥미를 유발하여 자신의 코드에서 생성기를 사용하는 방법을 생각해 보는 데 도움이 되기를 바랍니다. 31로 시작하는 Firefox 버전과 39로 시작하는 Chrome 버전은 기본적으로 생성기를 지원합니다. Regenerator 프로젝트는 다른 브라우저에 대한 생성기 지원을 제공하며 Traceur를 사용하는 것도 하나의 방법입니다.

이 자료를 검토하는 데 도움을 주신 에릭 아비드슨님께 감사드립니다.