말랑말랑 LAB

[JavaScript] 이터레이터와 제너레이터 본문

JavaScript/JavaScript 스터디

[JavaScript] 이터레이터와 제너레이터

쭈02 2019. 1. 5. 14:36

자바스크립트 이터레이터와 제너레이터 (ECMAScript 6)



o 이터레이션(iteration)

  • 반복 처리라는 뜻
  • 데이터 안의 요소를 연속적으로 꺼내는 행위
o 이터레이터(iterator)
  • 반복 처리(iteration)가 가능한 객체
  • 배열의 Symbol.iterator 메서드는 이터레이터를 반환한다
  • 배열 예제
    • iter.next()를 호출할 때마다 iterator result 객체가 반환되는데, 이는 value와 done 프로퍼티를 갖는 객체이다.
    • value 프로퍼티에는 차례대로 꺼내진 배열 요소의 값이 저장되고,
      done 프로퍼티는 iteration이 끝났는지를 뜻하는 논리값이 저장된다
## 아래는 배열의 이터레이터를 반환하는 함수인데, 빨간색 괄호 부분을 한 줄 코드로 간단히 바꿔보자 !!



o 반복 가능한 객체와 for/of문

  • 이터레이터를 사용해서 이터레이션(반복)을 하려면 개발자가 적절한 처리를 직접 작성해야 함

  • 예제 - 배열의 요소를 이터레이터를 사용해서 객체 형태가 아닌 목록으로 바꾸고 싶다면?

  • for/of문을 사용하면 위의 반복 처리를 자동으로 할 수 있다 !

  • for/of 문으로 반복 처리할 수 있는 객체

    • Symbol.iterator 메서드를 가지고 있어야 함

    • 즉, 반복 가능(iterable)한 객체

    • Array, String, TypedArray, Map, Set


o 제너레이터

함수 블록을 한 번에 실행하지 않고, 실행을 일시 중지했다가 필요한 시점에 다시 시작할 수 있는 함수

순회 가능한(iterable)한 값을 생성하는(gererate) 함수

  • 함수를 호출하면 함수 블록이 실행되지만, 제너레이터는 제너레이터 객체를 반환한다.
  • 이 제너레이터 객체는 순회 가능한(iterable) 값이다.
o 제너레이터 함수의 생성 규칙
  • function* 키워드로 선언한다.
  • 하나 이상의 yield 구문을 포함한다.


o 제너레이터의 동작

  • next 메소드가 호출되면 함수의 첫 번째 yield 연산자 위치까지 실행한 후, 일시 정지 상태가 된다.

  • 또 next 메소드가 호출되면 일시 정지된 코드를 다시 실행하다가 yield를 만나면 또 다시 실행을 일시 중지한다.

## 아래 예제에서 next() 함수를 3번 호출할 때 결과값을 예상해보자 !! (console문자열, iterator result)


  • 제너레이터 객체의 next 메소드는 인자를 받을 수도 있다.

## 아래 4개의 console.log 결과값도 예상해보자 !!




'JavaScript > JavaScript 스터디' 카테고리의 다른 글

[JavaScript] 정규 표현식  (0) 2019.01.16
[JavaScript] 화살표 함수  (0) 2019.01.06
[JavaScript] 고차 함수  (0) 2019.01.05
[JavaScript] 클로저  (0) 2019.01.05
[JavaScript] 함수의 정의  (0) 2019.01.05
Comments