Iterator   이터레이터, 반복자

(2022-07-08)

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


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

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

  ㅇ 반복 가능 객체 (Iterable Object, 이터러블 객체)
     - 그 내부에 반복 가능한 요소들을 갖춘 객체
        . 객체 내 값들의 반복 처리 동작을 정의해 둔 객체
     - 例)
        . (파이썬) 리스트, 튜플, 문자열 등
        . (자바스크립트) Array 객체, String 객체, Map 객체, Set 객체 등

  ㅇ 반복자 (Iterator, 이터레이터)
     - 연속된 반복 값들을 만들어 낼 수 있고, 이들을 하나하나 세밀하게 제어 가능하도록,
        . next 메소드를 갖음
     - 그 내부에 반복 동작 방법이 정의된 객체


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

  ㅇ 그 내부에 반복 동작이 정의된, 이터레이터를 반환할 수 있는 객체
     - 사실상, 배열 객체를, 보다 일반화시킨 객체로도 볼 수 있음

  ㅇ 대표적인 내장 이터러블 객체 例)
     - Array 객체, String 객체, Map 객체, Set 객체 등
        . 이들 내부에 Symbol.iterator라는 메소드가 구현되어 있어, 반복 동작이 가능함

  ㅇ 이터러블 객체의 특징
     - 그 내부에 Symbol.iterator 라는 특별한 형태의 함수가 있게 됨
        . Symbol.iterator 메소드 이란?
           .. 매개변수가 없는 함수 형태로써,
           .. 이터레이터를 만들어 반환하는 특별한 함수 임

     - 이터레이터(반복자)를 만들어 반환 가능 함

  ㅇ 이터러블 객체의 사용처
     - for of 문에서, 반복 처리 가능

     - 전개 연산자 (...)에서, 사용 가능
        . 例) Set 객체에 대해 `전개 연산자 ...`를 사용하는 경우
           .. const arr = ['one','two','three','one','two','four'];
           .. const s = new Set(arr); // 배열을 중복 없는 Set 객체로 변환
           .. console.log([...s]); // => ['one','two','three','four']

     - 분할 대입 연산(Destructuring Assignment)에서, 사용 가능


3. [자바스크립트]  이터레이터 (Iterator, 반복자)

  ㅇ 주어진 객체 내 요소별로 하나씩 접근하며,
     - 반복 처리(이터레이션,Iteration)가 가능한 구조를 갖춘 객체

  ㅇ 이터레이터 객체의 특징 
     * 반복 처리를 단계별로 세밀하게 제어할 수 있도록 만들어진 객체
     - next 메소드를 갖음
        . next 메소드의 반환값으로 value,done 속성을 갖는 객체를 줌
           .. 이 경우 반환되는 것이 요소 값이 아니라, 
           .. 반복 처리용 프로퍼티를 갖는 반복자 객체임
        . 즉, next 반환 객체는, { value : 요소값, done : 논리값 } 임
           .. value 프로퍼티 : 꺼낸 값이 이곳에 저장됨 (현재 위치의 요소값)
           .. done 프로퍼티 : 반복의 끝인지를 나타내는 논리값
     - 만일, 모두 반복 처리하고, 다시 처음부터 하려면,
        . 이터레이터를 다시 얻어야 함 

  ㅇ 반복자 생성 例) 
     - const iterator1 = array.values(); 
        . 배열 메소드 values()를 사용하여, 반복자 생성
     - const iterator2 = array[Symbol.iterator](); 
        . 이터러블 객체 내 특별한 함수 Symbol.iterator을 키로 하여, 반복자 생성

     * 위에서,
       . 배열메소드 values() 또는 [Symbol.iterator]의 반환값으로,
        . 반복자 (iterator1 또는 iterator2)가 생성 됨

  ㅇ 반복자를 통한 순환 例)
     - for (let value of mapIterator) { ...}

파이썬 반복
   1. 파이썬 제어 구문   2. 이터레이터   3. 제너레이터  
JS 객체
   1. JS 객체   2. JS 객체 구분   3. JS 객체의 생성 저장 접근   4. JS 클래스   5. 프로토타입 객체   6. 프라미스 객체   7. 일급 객체   8. 래퍼 객체   9. 콘솔 객체   10. this 참조   11. 이터레이터   12. 제너레이터   13. 범용 객체 (Object object)  


Copyrightⓒ written by 차재복 (Cha Jae Bok)               기술용어해설 후원
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"