[JS] iterable객체 iterator

이의섭·2021년 12월 28일
0
post-thumbnail

iterable 객체

반복 가능한(iterable, 이터러블) 객체는 배열을 일반화한 객체입니다. 이터러블 이라는 개념을 사용하면 어떤 객체에든 for..of반복문을 사용할 수 있습니다.

배열은 대표적인 이터러블입니다. 배열 외에도 다수의 내장 객체가 반복 가능하다고 합니다. 문자열 역시 이터러블의 예 입니다.

그러면 for..of반복문을 사용할 수 있으면 iterable객체라는 것 인데 어떤 조건이 있어야 사용이 가능한것일까요?

Symbol.iterator

for..of반복문을 사용할 수 있으려면 객체에 Symbol.iterator메서드가 있어야 한다고 합니다.

for..of는 다음과 같은 과정을 통해 이뤄지기때문에 Symbol.iterator 메서드가 필요합니다.

  1. for..of가 시작되자마자 Symbol.iterator를 호출합니다.
  2. Symbol.iterator는 이터레이터(next메서드가 있는 객체)를 반환해야 합니다.
  3. 이후 for..of는 이터레이터만을 대상으로 동작합니다.
  4. 다음 값이 필요하면 이터레이터의 next()메서드를 호출합니다.
  5. next()의 반환값은 { done: Boolean, value: any }와 같은 형태이고, done: true는 반복이 종료되었음을 의미하고 false이면 value에 다음 값이 저장됩니다.

이를 통해 우리는 어떤 배열이 아닌 객체가 있는데, 이 객체가 어떤 것들의 컬렉션을 나타내고 있는 경우, for..of문법을 적용할 수 만 있다면 순회하는데 유용할 겁니다. 이럴때 직접 해당 객체에 Symbol.iterator메서드를 생성해줘서 순회가 가능하도록 만들 수 있습니다.

이터러블과 유사 배열

비슷해 보이지만 아주 다른 용어 두 가지가 있습니다.

  • 이터러블은 Symbol.iterator메서드가 구현된 객체입니다.
  • 유사 배열은 인덱스와 length프로퍼티가 있어서 배열처럼 보이는 객체 입니다.

이터러블과 유사 배열은 대개 배열이 아니기때문에 push, pop등의 메서드를 지원하지 않는다고 합니다. 그렇지만 배열이 아닌 객체들을 배열로 만들어주는 Array.from()메서드가 존재하기때문에 이를 사용하면 배열로 만들 수 있습니다.

profile
사용자 중심 생각하는 프론트엔드 개발자가 되고 싶은..

0개의 댓글