Iterator, Generator   이터레이터, 제너레이터

(2019-06-07)

Iterable Object, 이터러블 객체, 열거 가능 객체, 반복 가능한 객체

1. 열거 가능 객체/반복 가능한 객체 (Iterable Object)

  ㅇ 그 내부에 열거(반복) 가능한 요소들을 갖는 객체
     - 例) Array 객체,String 객체,Map 객체,Set 객체 등

  ㅇ 특징
     - 기본적으로 이터레이터(반복자)를 만들 수 있음
     - 객체 내 Symbol.iterator 속성에 특별한 형태의 함수가 들어있음
        . Symbol.iterator 메소드 : 이터레이터를 만들어 반환하는 함수
     * 아래와 같이, `열거(반복)와 관련된 기능`들을 쓸 수 있음
        . for ... of 루프의 사용 가능
        . 전개 연산자 (...)의 사용 가능
        . 분할 대입 연산(Destructuring Assignment) 가능


2. 이터레이터 (Iterator, 반복자)

  ㅇ 반복 처리(이터레이션,Iteration)가 가능한 구조를 갖춘 객체
     - 객체의 내용을 요소별로 열거/반복하기 위한 구조를 갖춘 객체

  ㅇ 특징 
     * 반복 처리를 단계별로 세밀하게 제어할 수 있도록 만들어진 객체
     - next 메소드를 갖음
     - next 메소드의 반환값 : 요소 값이 아니라, 반복 처리용 프로퍼티를 갖는 반복자 객체
        . 즉, next 반환 객체는, { value : 요소값, done : 논리값 } 임
           .. value 프로퍼티 : 꺼낸 값이 이곳에 저장됨
           .. done 프로퍼티 : 반복의 끝인지를 나타내는 논리값

  ㅇ 이터레이터 생성 例) 
     - const iterator1 = array.values(); 
     - const iterator2 = array[Symbol.iterator]();
        . Symbol.iterator에서 반환된 심볼을 키로 하여, 배열 객체메소드를 호출 함
     * 배열 array 내 메소드 values() 또는 [Symbol.iterator]의 반환값으로,
       배열 이터레이터(Array Iterator) iterator1 또는 iterator2가 생성 됨


3. 제너레이터 (Generator)

  ㅇ 반복 처리 가능한 이터레이터를 값으로 반환하는 함수
     - 매우 쉽게 반복 가능한 객체를 반환하는 특별한 형태의 함수

  ㅇ 특징 
     - function* 함수명() { ...} 형식으로 정의
     - yield 명령으로 값을 반환
        . yield 명령문이 여럿일 때, 다음 호출시 이후 yield 명령문부터 재개
        . 한편, return의 경우는 바로 함수를 종료시킴

  ㅇ 장점
     - 결과를 무한히 내놓는 함수는 구현할 수 없으며,
     - 어느 정도 상한을 두더라도, 이를 저장할 메모리 소요가 필요함
     - 제너레이터는, 쉽게 또한 최소한의 자원 소모로써, 규칙적인 발생 구조를 갖게 할 수 있음


[JS 객체] 1. JS 객체 2. JS 객체 구분 3. JS 객체의 생성 저장 접근 4. JS 클래스 5. 프로토타입 객체 6. 프라미스 객체 7. 일급 객체 8. 래퍼 객체 9. 콘솔 객체 10. this 참조 11. 이터레이터,제너레이터 12. 범용 객체

 
        최근수정     요약목록     참고문헌