본문 바로가기
개발/TTL

[JS][자바스크립트] iterable 객체

by ISA(류) 2021. 6. 30.

1. iterable 객체 (javascript.info)

 

iterable 객체

 

ko.javascript.info

 

이터러블(반복가능한) 객체는 배열을 일반화한 객체이다. for..of문을 통해서 반복 할 수 있어야한다.

for..of문은 Symbol.iterator 시스템 심볼을 호출하기에 객체에 해당 심볼이 존재해야지 for..of문을 실행 할 수 있다.

이터러블 객체는 유사배열 객체와 다르다. 다만 이터러블과 유사배열이라는 속성은 동시에 적용 될 수 있다.

이터러블 객체의 핵심은 관심사 분리에 있다. 즉 객체와 이터러블을 분리 할 수 있다는 것. 그 외에도 반복을 조금 더

확실히 통제할 수 있다거나 반복 자체에 직접적인 개입이 가능하다는게 장점으로 보인다. 이터러블이나 유사배열 객체를 배열로 만들어주는 메소드인 Array.form(배열 copy에도 자주 쓰인다.)내장 메서드가 중요한 포인트로 보인다.

자바스크립트에서는 이터러블 & 유사배열 객체는 둘다 배열로 형변환이 가능하다.

문자열이나 배열 역시 이터러블 속성을 가지며 문자열 이터러블의 경우 서로게이트 쌍(surrogate pair)까지 지원해준다.

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

# 사용법

1. obj[Symbol.iterator]() 시스템심볼 메서드를 설정해서 이터러블 객체를 생성가능하다.

2. 이터러블 내부의 next를 메소드를 통해서 반복 과정을 통제가능하다.

3. for..of문으로 이터러블 반복이 가능하며, obj[Symbol.iterator]().next()로 이터러블을 명시적으로 호출가능하다.

 

# 결론 

이터러블은 결국 Symbol.iterator 메서드가 반드시 구현 되어 있어야한다. obj[Symbol.iterator]의 return을 이터레이터라고 부른다. 이터러블은 for..of문이나 명시적 호출로 호출가능하고 Array.from으로 배열로 만들 수 있다. 이를 통해서 오브젝트를Array.from(obj[, mapFn, thisArg])을 사용하면 이터러블이나 유사 배열인 obj를 진짜 Array로 만들 수 있습니다. 이렇게 하면 obj에도 배열 메서드를 사용할 수 있죠. 선택 인수 mapFn와 thisArg는 각 요소에 함수를 적용할 수 있다.

 

반응형