Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

동그란 도그린

[모던 자바스크립트 Deep Dive🦎] 34장 : 이터러블 본문

FrontEnd/Javascript

[모던 자바스크립트 Deep Dive🦎] 34장 : 이터러블

도그rin 2023. 8. 26. 23:27

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. 사용자 정의 이터러블

  • 이터레이션 프로토콜을 준수하지 않는 일반 객체도 이터레이션 프로토콜을 준수하도록 구현하면 사용자 정의 이터러블이 됨
  • 배열이나 문자열 등은 모든 데이터를 메모리에 미리 확보한 다음 데이터를 공급
  • 이터러블은 지연 평가를 통해 데이터를 생성

 

※ 지연 평가

: 데이터가 필요한 시점 이전에는 데이터를 미리 생성하지 않다가, 데이터가 필요한 시점이 되면 데이터를 생성하는 기법

  • 지연 평가 사용 시 장점
    • 불필요한 데이터를 미리 생성하지 않고 데이터가 필요한 순간에 생성
    • ⇒ 빠른 실행 속도를 기대할 수 있음
    • ⇒ 불필요한 메모리 소비하지 않음
    • ⇒ 무한도 표현할 수 있음
  •  
Comments