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) { ...}



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