1. iterable 객체 (javascript.info)
이터러블(반복가능한) 객체는 배열을 일반화한 객체이다. for..of문을 통해서 반복 할 수 있어야한다.
for..of문은 Symbol.iterator 시스템 심볼을 호출하기에 객체에 해당 심볼이 존재해야지 for..of문을 실행 할 수 있다.
이터러블 객체는 유사배열 객체와 다르다. 다만 이터러블과 유사배열이라는 속성은 동시에 적용 될 수 있다.
이터러블 객체의 핵심은 관심사 분리에 있다. 즉 객체와 이터러블을 분리 할 수 있다는 것. 그 외에도 반복을 조금 더
확실히 통제할 수 있다거나 반복 자체에 직접적인 개입이 가능하다는게 장점으로 보인다. 이터러블이나 유사배열 객체를 배열로 만들어주는 메소드인 Array.form(배열 copy에도 자주 쓰인다.)내장 메서드가 중요한 포인트로 보인다.
자바스크립트에서는 이터러블 & 유사배열 객체는 둘다 배열로 형변환이 가능하다.
문자열이나 배열 역시 이터러블 속성을 가지며 문자열 이터러블의 경우 서로게이트 쌍(surrogate pair)까지 지원해준다.
- for..of가 시작되자마자 for..of는 Symbol.iterator를 호출합니다(Symbol.iterator가 없으면 에러가 발생합니다). Symbol.iterator는 반드시 이터레이터(iterator, 메서드 next가 있는 객체) 를 반환해야 합니다.
- 이후 for..of는 반환된 객체(이터레이터)만을 대상으로 동작합니다.
- for..of에 다음 값이 필요하면, for..of는 이터레이터의 next()메서드를 호출합니다.
- 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는 각 요소에 함수를 적용할 수 있다.
'개발 > TTL' 카테고리의 다른 글
[JS][자바스크립트] N진수변환 (0) | 2021.07.23 |
---|---|
[JS][자바스크립트]워크맵과 워크셋 (0) | 2021.07.05 |
[JS][자바스크립트]맵과 셋 (0) | 2021.07.01 |
[JS][자바스크립트] 객체 와 원시 자료형 (0) | 2021.06.27 |
[JS][자바스크립트] 심볼 (0) | 2021.06.27 |