동그란 도그린
[모던 자바스크립트 Deep Dive🦎] 34장 : 이터러블 본문
34-1. 이터레이션 프로토콜
- 이터레이션 프로토콜
- ES6에 도입
- 순회 가능한terable 데이터 컬렉션(자료구조)을 만들기 위해 ECMAScript 사양에 정의하여 미리 약속한 규칙
- 이터러블 프로토콜과 이터레이터 프로토콜이 있음
- ES6 이전
- 순회 가능한 데이터 컬렉션(배열 , 문자열 , 유사 배열 객체 , DOM 컬렉션 등)은 통일된 규약 없이 각자 나름의 구조를 가지고 for 문, for .. in 문, forEach 메서드 등 다양한 방법으로 순회 가능
- ES6
- 순회 가능한 데이터 컬렉션을 이터레이션 프로토콜을 준수하는 이터러블로 통일하여 for … of문, 스프레드 문법, 배열 디스트럭처링 할당 대상으로 사용할 수 있도록 일원화
- 이터러블
- 이터러블 프로토콜을 준수한 객체를 이터러블이라고 함
- 이터러블은 Symbol. iterator를 프로퍼티 키로 사용한 메서드를 직접 구현하거나 프로토타입 체인을 통해 상속 받은 객체
- ex) 배열은 Array. prototype의 Symbol.iterator 메서드를 상속받는 이터러블
- 이터레이터
- 이터러블의 Symbol. iterator 메서드를 호출하면 이터레이터 프로토콜을 준수한 이터레이터를 반환
- Symbol.iterator 메서드가 반환한 이터레이터는 next 메서드를 가짐
- 이터레이터의 next 메서드
- 이터레이터의 next 메서드는 이터러블의 각 요소를 순회하기 위한 포인터의 역할
- next 메서드 호출 시 이터러블을 순차적으로 순회하며 그 결과를 나타내는 이터레이터 리절트 객체를 반환함
- 이터레이터 리절트 객체의 value 프로퍼티 : 현재 순회 중인 이터러블의 값
- 이터레이터 리절트 객체의 done 프로퍼티 : 이터러블의 순회 완료 여부
34-2. 빌트인 이터러블
34-3. for … of 문
- for … of 문
- 이터러블을 순회하면서 이터러블의 요소를 변수에 할당
- 이터레이터의 next 메서드를 호출하여 이터러블을 순회
- next 메서드가 반환한 이터레이터 리절트 객체의 value 프로퍼티 값을 for.. of 문의 변수에 할당
- done 프로퍼티 값이 false이면 순회를 계속하고, true이면 순회 중단
- for … in 문의 형식과 매우 유사
// for ... of 문 for (변수선언문 of 이터러블) { … } // for ... in 문 for (변수선언문 in 객체) { … }
- for … in 문
- 객체의 프로토타입 체인 상에 존재하는 모든 프로토타입의 프로퍼티 중에서 프로퍼티 어트 리뷰트 [[Enumerable]]의 값이 true인 프로퍼티를 순회하며 열거
- 단, 프로퍼티 키가 심벌인 프로퍼티는 열거 X
34-4. 이터러블과 유사 배열 객체
※ 유사 배열 객체
: 배열처럼 인덱스로 프로퍼티 값에 접근 가능하고, length 프로퍼티를 갖는 객체
- 유사 배열 객체는 이터러블이 아닌 일반 객체
- 단, arguments, NodeList, HTMLCollection은 유사 배열 객체이면서 이터러블
- ⇒ ES6에서 이터러블이 도입되면서 위의 객체에 Symbol.iterator 메서드를 구현하여 이터러블이 됨
- ⇒ 이터러블이 된 후에도 length 프로퍼티를 가지며 인덱스로 접근 가능하므로 유사 배열 객체 이면서 이터러블
- 배열도 이터러블
- 모든 유사 배열 객체가 이터러블은 아님
34-5. 이터레이션 프로토콜의 필요성
- 이터레이션 프로토콜은 다양한 데이터 공급자가 하나의 순회 방식을 갖도록 규정
- ⇒ 데이터 소비자가 효율적으로 다양한 데이터 공급자를 사용할 수 있도록 데이터 소비자와 데이터 공급자를 연결하는 인터페이스의 역할
34-6. 사용자 정의 이터러블
- 이터레이션 프로토콜을 준수하지 않는 일반 객체도 이터레이션 프로토콜을 준수하도록 구현하면 사용자 정의 이터러블이 됨
- 배열이나 문자열 등은 모든 데이터를 메모리에 미리 확보한 다음 데이터를 공급
- 이터러블은 지연 평가를 통해 데이터를 생성
※ 지연 평가
: 데이터가 필요한 시점 이전에는 데이터를 미리 생성하지 않다가, 데이터가 필요한 시점이 되면 데이터를 생성하는 기법
- 지연 평가 사용 시 장점
- 불필요한 데이터를 미리 생성하지 않고 데이터가 필요한 순간에 생성
- ⇒ 빠른 실행 속도를 기대할 수 있음
- ⇒ 불필요한 메모리 소비하지 않음
- ⇒ 무한도 표현할 수 있음
'FrontEnd > Javascript' 카테고리의 다른 글
[모던 자바스크립트 Deep Dive🦎] 33장 : Symbol (0) | 2023.08.26 |
---|---|
[모던 자바스크립트 Deep Dive🦎] 32장 : String (2) | 2023.08.26 |
[모던 자바스크립트 Deep Dive🦎] 27장 : 배열 (0) | 2023.08.12 |
[모던 자바스크립트 Deep Dive🦎] 25장 : 클래스 (0) | 2023.07.09 |
[모던 자바스크립트 Deep Dive🦎] 19장 : 프로토타입 (0) | 2023.05.27 |
Comments