iterable 객체
iterable 객체
반복 가능한(iterable) 객체는 배열을 일반화(동일한 플롯의) 한 객체
이터러블 개념 사용 시 for…of 반복문 적용 가능
배열, 문자열은 대표적인 이터러블
배열 외에도 다수의 내장 객체 반복 가능
배열 아닌 객체가 어떤 것들의 컬렉션(일반화 시킨 객체) 일 경우 for..of 문법 적용할 수 있을 시 컬렉션 순회 하는데 유용
-
Symbol.iterator
객체를 이터러블로 만들때 사용하는 특수 내장 심볼 메서드.
객체 안에서 직접 추가하거나 객체 밖에서 추가 가능
이터레이터(iterator) 는 반드시 next 가 있는 객체 반환
객체 안에서 이터레이터 작성 시 반복문을 하나의 객체에 동시에 사용 불가능.(이터레이터가 객체 자신 하나 뿐)
-
next
함수로써 {done:Boolean, value:any} 형태의 객체 반환.
done=true는 반복 종료, done=false는 value 에 다음 값 저장
-
알고리즘
-
for..of 시작되자마자 for..of는 Symbol.iterator 호출 (없을 시 에러 발생.)
-
Symbol.iterator 는 반드시 이터레이터(next 있는 객체) 반환
-
for..of 는 반환된 객체(이터레이터) 만을 대상으로 동작
-
for..of 에 다음 값 필요할 시 for..of 는 이터레이터의 next() 메서드 호출
-
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 직접 구현 가능
-
알고리즘
-
인자의 객체 받아 이터러블이나 유사 배열인지 조사
-
조사후 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 으로 이터러블이나 유사 객체를 ‘진짜’ 객체로 만들 때 사용.