2 minute read

iterable 객체

반복 가능한(iterable) 객체는 배열을 일반화(동일한 플롯의) 한 객체

이터러블 개념 사용 시 for…of 반복문 적용 가능

배열, 문자열은 대표적인 이터러블

배열 외에도 다수의 내장 객체 반복 가능

배열 아닌 객체가 어떤 것들의 컬렉션(일반화 시킨 객체) 일 경우 for..of 문법 적용할 수 있을 시 컬렉션 순회 하는데 유용

  • Symbol.iterator

    객체를 이터러블로 만들때 사용하는 특수 내장 심볼 메서드.

    객체 에서 직접 추가하거나 객체 에서 추가 가능

    이터레이터(iterator) 는 반드시 next 가 있는 객체 반환

    객체 안에서 이터레이터 작성 시 반복문을 하나의 객체에 동시에 사용 불가능.(이터레이터가 객체 자신 하나 뿐)

    • next

      함수로써 {done:Boolean, value:any} 형태의 객체 반환.

      done=true는 반복 종료, done=false는 value 에 다음 값 저장

    • 알고리즘

      1. for..of 시작되자마자 for..of는 Symbol.iterator 호출 (없을 시 에러 발생.)

      2. Symbol.iterator 는 반드시 이터레이터(next 있는 객체) 반환

      3. for..of 는 반환된 객체(이터레이터) 만을 대상으로 동작

      4. for..of 에 다음 값 필요할 시 for..of 는 이터레이터의 next() 메서드 호출

      5. next() 는 객체 반환.

      • 핵심

        ‘관심사의 분리’

        객체엔 next() 메서드 없음

        대신 Symbol.iterator() 호출해서 만든 ‘이터레이터’ 객체와 이 객체의 메서드 next() 에서 반복에 사용될 값 만들어 냄

      • 무한개의 이터레이터

        무수히 많은 이터레이터 가능

        next 에는 제약사항 없음

        반복문 사용하여 끝 없더라도 break 사용 시 언제든 반복 중지 가능

  • 문자열은 이터러블

    배열과 문자열은 가장 광범위하게 쓰이는 내장 이터러블

    for..of 사용시 문자열의 각 글자 순회

    서로게이트 쌍도 동작

  • 이터레이터 명시적으로 호출

    이터레이터 직접 순회하고 순회 가능

    반복 과정 더 잘 통제 가능 (비동기 프로그래밍)

  • 이터러블과 유사 배열

    헷갈리는 두 개 용어 존재

    • 이터러블

      Symbol.iterator 메서드 구현된 객체

      for..of , 배열 메서드 지원 함

    • 유사 배열

      인덱스와 length 프로퍼티 있어서 배열처럼 보임

      Symbol.iterator 메서드는 구현 안 됨

      for..of , 배열 메서드 지원 안 함

    이터러블 이면서 유사 객체 인 경우는 존재 (문자열)

    이터러블 === 유사 객체 의 return 은 False.

  • Array.from 메서드

    이터러블이나 유사 배열 받아 ‘진짜’ 배열 만들어줌

    for..of 나 배열 메서드 사용 가능해짐

    str.split 과 달리 문자열 자체가 가진 이터러블 속성 이용해 동작.(써로게이트 쌍도 제대로 적용)

    써로게이트 쌍 처리할 수 있는 slice 직접 구현 가능

    • 알고리즘

      1. 인자의 객체 받아 이터러블이나 유사 배열인지 조사

      2. 조사후 true 일 시 새로운 배열 만들고 인자의 모든 요소 새롭게 만든 배열로 복사

    • ‘매핑(mapping)’ 함수

      인자에 선택적으로 넣기 가능

      새로운 배열에 요소 추가 하기전에 각 요소 대상으로 매핑 함수 적용 가능

      적용하고 반환된 값 list에 넣음

      thisArg 로 각 요소의 this 지정 가능

요약

  • 이터러블 객체는 배열을 일반화 한 객체

  • 이터러블 개념 적용 시 for..of 문법 적용 해서 순회가능

  • Symbol.iterator 로 객체 이터러블 화.

  • Symbol.iterator 는 객체 안, 밖에서 추가 가능하지만 안에서 추가 시 이터러블 객체 하나뿐이라 for..of 중첩 불가능

  • Symbol.iterator 는 반드시 next 가 있는 객체 반환

  • next 함수는 {done: Boolean, value: any} 형태 연속으로 반환

  • Symbol.iterator 의 핵심은 ‘관심사 의 분리’로 객체에 next() 메서드 없게 함

  • 문자열, 객체는 대표적인 이터러블

  • 이터레이터는 명시적으로 호출 가능

  • 이터러블은 Symbol.iterator 메서드 구현된 객체로 for..of, 배열 메서드 사용 가능

  • 유사 객체는 Symbol.iterator 메서드 미구현된 객체로 for..of, 배열 메서드 사용 불가능

  • Array.from 으로 이터러블이나 유사 객체를 ‘진짜’ 객체로 만들 때 사용.

Categories: ,

Updated: