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

(2020-09-13)

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

1. 이터러블, 이터러블 객체 이란?

  ㅇ 열거 가능, 반복 가능 (Iterable,이터러블)
     - 해당 객체 내 요소들을 하나씩 순환하며 꺼내 사용할 수 있음을 말함

  ㅇ 열거 가능, 반복 가능 (Iterable,이터러블) 객체
     - 그 내부에 열거(반복) 가능한 요소,기능들을 갖는 객체


2. 자바스크립트 객체 중 이터러블 객체 (Iterable Object)

  ㅇ 이터러블 객체 例) Array 객체,String 객체,Map 객체,Set 객체 등

  ㅇ 이터러블 객체의 사용
     - 아래와 같이, `열거(반복)와 관련된 기능`들을 쓸 수 있음
        . for ... of 루프에서 사용 가능
        . 전개 연산자 (...)에서 사용 가능
        . 분할 대입 연산(Destructuring Assignment)에서 사용 가능

  ㅇ 이터러블 객체의 특징
     - 이터레이터(반복자)를 만들 수 있음
     - 객체 내 Symbol.iterator 라는 특별한 형태의 함수가 있음
        . Symbol.iterator 메소드 : 이터레이터를 만들어 반환하는 함수


3. 이터레이터 (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가 생성 됨


4. 제너레이터 (Generator)

  ㅇ 생성되면(호출되면) 빌 때까지 하나씩 뽑아 사용하는 함수자바스크립트 형식
     - function* 함수명() { ...} 으로 정의
     - yield 명령으로 값을 반환
        . yield 명령문이 여럿일 때, 다음 호출시 이후 yield 명령문부터 재개
        . 한편, return의 경우는 바로 함수를 종료시킴

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


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

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