Iterator와 Generator Function

eeensu·2023년 7월 30일
0

javascript

목록 보기
8/31
post-thumbnail

Iterator

이터레이터(Iterator)는 자바스크립트의 컬렉션(배열, 맵, 셋 등)을 순회하고 값을 하나씩 가져오는 데 사용되는 기능이다. 이터레이터는 순회 가능한 객체에서 값을 반복적으로 가져오는 방법을 제공하여 반복 작업을 간편하게 처리할 수 있도록 도와준다.

이터레이터를 이해하기 위해서는 먼저 "순회 가능한(iterable)" 개념을 알아야 한다. 순회 가능한 객체는 Symbol.iterator 라는 특별한 메서드를 가지고 있으며, 이 메서드는 이터레이터를 반환한다. 이터레이터는 { value, done } 형태의 객체를 반환하는 next() 메서드를 가지고 있다. 자바스크립트에서는 이러한 Iterator 기능을 보다 직관적으로 사용할 수 있도록 Generator Function 기능을 제공한다.



Generator Function

Generator 함수는 함수 실행을 중간에 멈추고 다시 시작할 수 있는 특별한 종류의 함수이다. 일반적인 함수는 호출되면 처음부터 끝까지 실행되고 결과값을 반환하며 종료되지만, Generator 함수는 실행 중간에 값을 반환하고 함수를 일시 중단한 다음, 다시 재개할 수 있다.

function* idMaker(){
  var index = 0;

  while(index < 3)
      yield index++;
}

var gen = idMaker();

console.log(gen.next().value);      // 0
console.log(gen.next().value);      // 1
console.log(gen.next().value);      // 2
console.log(gen.next().value);      // undefined 

이때, 일시 중지된 상태에서는 컨텍스트(변수 값)은 출입 과정에서 저장된 상태로 남아있다. Generator 함수는 호출되어도 즉시 실행되지 않고, 대신 함수를 위한 Iterator 객체가 반환된다.

Interatornext() 메서드를 호출하면 Generator 함수가 실행되어 yield 문을 만날 때까지 진행하고, 이후 next() 메서드가 호출되면 진행이 멈췄던 위치에서부터 재실행한다.

next() 가 반환하는 객체는 yield 문이 반환할 값(yielded value)을 나타내는 value 속성과, Generator 함수 안의 모든 yield 문의 실행 여부를 표시하는 boolean 타입의 done 속성을 갖는다.

next()를 인자 값과 함께 호출할 경우, 진행을 멈췄던 위치의 yield 문을 next() 메서드에서 받은 인자 값으로 치환하고 그 위치에서 다시 실행하게 된다.


Generator 함수는 비동기 처리에 유용하게 사용될 수 있으며, 복잡한 순환 로직이나 데이터 처리에도 효과적으로 적용될 수 있다. Iterator와 Generator는 자바스크립트의 다양한 상황에서 편리하게 활용되는 기능이기에 숙지하도록 하자.

profile
안녕하세요! 26살 프론트엔드 개발자입니다! (2024/03 ~)

0개의 댓글