← 글 목록

notes

34장. 이터러블

모던 JS Deep Dive — 이터러블·이터레이터 프로토콜과 순회 핵심 정리.

참고: 이웅모 《모던 자바스크립트 Deep Dive》 34장 · [MDN Iteration protocols](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)

for…of가 도는 이유는 배열이 특별해서가 아니라 이터레이션 프로토콜 때문이다. Iterable이 Symbol.iterator로 Iterator를 내놓고, Iterator가 {value, done}을 반복한다.

flowchart LR
  ITB[Iterable] -->|Symbol.iterator| ITR[Iterator]
  ITR -->|next| R["{value,done}"]

34.1 프로토콜

이터러블: obj[Symbol.iterator]() → 이터레이터 이터레이터: next() → { value, done }

34.2 빌트인 이터러블

Array, String, Map, Set, arguments, NodeList(환경)…

34.3 for…of

이터러블만. 객체 리터럴은 기본 비이터러블 → keys/entries.

34.4 유사 배열

length+인덱스는 있으나 이터러블 아닐 수 있음 → Array.from.

34.5 왜 프로토콜인가

소비자(for…of, spread, 디스트럭처링)가 공급자마다 다른 순회법을 알 필요 없게.

34.6 사용자 정의

const range = {
  from: 1, to: 3,
  [Symbol.iterator]() {
    let cur = this.from;
    const last = this.to;
    return {
      next() {
        if (cur <= last) return { value: cur++, done: false };
        return { value: undefined, done: true };
      },
    };
  },
};
console.log([...range]);

제너레이터로 더 쉽게(46·Iterator 노트).

함정

  • 일반 객체 for…of
  • iterator 일회성(소진)
  • 무한 이터러블 break 필수

실무

  • 커스텀 컬렉션에 Symbol.iterator
  • 변환은 Array.from
  • 게으른 시퀀스는 generator

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.

연습·복습 체크리스트

  • [ ] 핵심 표 다시 그리기
  • [ ] 함정 예제 콘솔 재현
  • [ ] MDN 북마크
  • [ ] 실무 코드 검색·리팩터 후보
  • [ ] 앞뒤 장 한 줄 연결

일기 보강

책을 덮고 한 줄 정의를 내 말로 다시 썼다. 예제 세 개를 치면 문제 유형이 보인다. 원문 복붙 없이 “왜”만 남겼다.

웹·스펙 메모

MDN 용어를 디버깅 언어로 번역해 적는다. 팀 컨벤션 초안으로 표를 제안한다.

실무 적용

PR에 체크리스트, 버그 리포트에 재현+기대/실제.