학습 공간 개념 · 판단 · 실험

Fanta Lab

질문 38 · 실전 면접 답변

Iterable과 Iterator 프로토콜은 어떻게 협력하나요?

이렇게 답해 보세요 (핵심 답변)

이터레이션 프로토콜은 데이터 컬렉션을 for...of나 전개 연산자(...)로 일관되게 순회하기 위한 약속으로, Iterable과 Iterator 두 프로토콜로 나뉩니다. Iterable은 [Symbol.iterator]() 메서드를 호출했을 때 Iterator 객체를 반환하는 약속이고, Iterator는 next()를 호출할 때마다 { value, done } 객체를 반환하는 약속입니다. 배열, 문자열, Map, Set은 기본 내장되어 있으며 일반 객체도 이 메서드를 구현하면 순회할 수 있습니다.

함께 설명하면 좋은 이유 (꼬리질문 대비)

  1. 배열 같은 컬렉션이 직접 next()를 갖지 않고 [Symbol.iterator]()로 새 Iterator를 만들어 주는 덕분에, 같은 배열을 여러 번 독립적으로 순회할 수 있습니다.
  2. 제너레이터가 반환하는 객체처럼 Iterator 자신이 [Symbol.iterator]()에서 자기 자신(this)을 반환하도록 만들면 Iterable이면서 Iterator가 됩니다.

면접에서 자주 하는 실수

단순히 next() 메서드만 가진 객체는 Iterator일 수는 있어도 [Symbol.iterator]()가 없다면 for...of 문에 바로 넣을 수 있는 Iterable은 아닙니다.

원리와 예제까지 읽기

공식 참고 자료

질문 목록 출처 ↗ · 원본 38번을 바탕으로 질문과 답변을 새로 정리했습니다.

← JavaScript