iterable과 iterator에 대하여 for..of...🧠

2024. 8. 2. 17:08·JS

이터러블(iterable)

이 개념들은 ES6(ECMAScript 2015)에서 도입되었습니다.

  • 이터러블(iterable) 프로토콜
  • 이터레이터(iterator) 프로토콜
  • 이터러블은 반복 가능해야 하고
  • 이터레이터 프로토콜은 Symbol.iterator 메서드를 갖고 있어야 한다.

이터러블은 즉, 반복 가능한 객체를 의미합니다. 배열 이외에도 다수의 내장 객체가 반복이 가능합니다.
문자열 역시 이터러블의 예입니다.

    const name = 'nami';
    const nameArr = Array.from(name);
    console.log(nameArr);
    //(4) ['n', 'a', 'm', 'i']
"console 결과")
  1. Symbol.iterator는 이터레이터 객체를 반환
  2. 이후 for..of는 반환된 이터레이터 객체만을 대상으로 동작
  3. 이 iterator 객체와 이 객체의 메서드 next()매서드를 호출
  4. next()는 값을 객체 {done:.., value :...}형태로 반환
  5. done 부분이 true 가 되었을때 헤당 for..of 문이 멈춘다.
  6. iterable 객체는 Symbol.iterator매서드를 가지고 있고, 이 매서드는 객체의 iterator 를 반환합니다.

이터레이터(iterator)

iterator는 값을 하나씩 차례로 꺼낼 수 있는 객체를 의미,
iterator 객체는 "next()"메서드를 가지고 있으며 이 메서드는 "value" 와 "done" 속성을 가지고 객체를 반환
"done" 속성이 'true' 를 반환할 때까지 반복합니다.


      const name = 'nami';
      const nameArr = Array.from(name);
      const nameIterator = nameArr[Symbol.iterator]();
      console.log(nameIterator.next());
      console.log(nameIterator.next());
      console.log(nameIterator.next());
      console.log(nameIterator.next());
      console.log(nameIterator.next());

      { value: 'n', done: false } FetchandAsync.html: 29 
      { value: 'a', done: false } FetchandAsync.html: 30 
      { value: 'm', done: false } FetchandAsync.html: 31 
      { value: 'i', done: false } FetchandAsync.html: 32
      {value: undefined, done: true} FetchandAsync.html:33

Custom iterable

const myIterable = {
    from: 1,
    to: 5,
    [Symbol.iterator]() { // 속성에 Symbol.iterator 매서드 구현
        return {
            current: this.from,
            last: this.to,
            next() {
                if (this.current <= this.last) {
                    return { value: this.current++, done: false };
                } else {
                    return { value: undefined, done: true };
                }
            }
        };
    }
};

for (const item of myIterable) {
    console.log(item); // 1, 2, 3, 4, 5
}

요약👍🏻

  • iterable : 반복할 수 있는 모든 객체, Symbol.iterator매서드를 가짐
  • iterator : 값들을 하나씩 꺼낼 수 있는 객체, 'next()' 매서드를 가짐

'JS' 카테고리의 다른 글

Axios..🦄  (0) 2024.11.15
프로미스(Promise)🫵🏻  (0) 2024.08.18
JS 동기,비동기? (Stack & Queue of 자료구조)🥴  (0) 2024.08.08
생성자 함수(new)와 instance 🫥  (0) 2024.08.05
'JS' 카테고리의 다른 글
  • Axios..🦄
  • 프로미스(Promise)🫵🏻
  • JS 동기,비동기? (Stack & Queue of 자료구조)🥴
  • 생성자 함수(new)와 instance 🫥
나미쓰
나미쓰
409....Conflict
  • 나미쓰
    나미의 기록📝
    나미쓰
  • 전체
    오늘
    어제
    • 분류 전체보기 (15)
      • 웹 접근성 (0)
      • JS (5)
      • 일상 (0)
      • Typescript (4)
      • React🦄 (4)
      • PHP (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • coding
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    javascript 생성자
    API
    비동기통신
    lalavel
    Vite
    optional chaining
    contructor
    생성자함수
    타입스크립트
    tsconfig
    javascript class
    PROMISE
    es6
    Iterable
    watch mode
    image component
    union type
    Await
    axios
    JavaScript
    학습블로깅
    restapi
    react-hook-form
    코딩공부
    TypeScript
    svgr
    비동기 함수
    typescript class
    intersection type
    php
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
나미쓰
iterable과 iterator에 대하여 for..of...🧠
상단으로

티스토리툴바