이터러블, 이터레이터, 이터러블 프로토콜, 이터레이터 프로토콜

boyeonJ·2023년 6월 10일
0

FRONT

목록 보기
5/14

정의를 내려보자🤓

  1. 이터러블 (Iterable):
    이터러블은 '반복 가능한'을 의미하며, 컬렉션 또는 데이터 구조에서 반복할 수 있는 객체입니다. 이터러블은 Symbol.iterator라는 특별한 메서드를 가지고 있으며, 이 메서드를 통해 이터레이터를 반환합니다. 배열, 문자열, 맵, 셋 등이 대표적인 이터러블 객체입니다.

  2. 이터레이터 (Iterator):
    이터레이터는 이터러블에서 값을 차례대로 반환하는 객체입니다. 이터레이터는 next() 메서드를 가지고 있으며, 호출할 때마다 이터러블에서 다음 값을 반환하고, 반환된 값은 value와 done 두 속성을 가지는 객체로 구성됩니다. 이터레이터는 값을 한 번씩 순차적으로 접근하면서 이전 값과 다음 값을 추적할 수 있는 역할을 합니다.

  3. 이터러블 프로토콜 (Iterable Protocol):
    이터러블 프로토콜은 자바스크립트에서 이터러블을 정의하기 위한 규약입니다. 이터러블 프로토콜은 Symbol.iterator 메서드를 가진 객체를 이터러블로 간주하며, 이 메서드는 이터레이터를 반환해야 합니다. 이터러블 프로토콜을 준수하는 객체는 for...of 루프나 스프레드 문법과 같은 이터러블을 사용하는 문맥에서 사용될 수 있습니다.

  4. 이터레이터 프로토콜 (Iterator Protocol):
    이터레이터 프로토콜은 자바스크립트에서 이터레이터를 정의하기 위한 규약입니다. 이터레이터 프로토콜은 next() 메서드를 가진 객체를 이터레이터로 간주하며, 이 메서드는 다음 값을 반환하고, 반환된 값은 value와 done 두 속성을 가지는 객체로 구성되어야 합니다. 이터레이터 프로토콜을 준수하는 객체는 반복 가능한 값들을 효율적으로 처리하고 순회하는 데 사용될 수 있습니다.

이터러블과 이터레이터 프로토콜은 자바스크립트에서 순회 가능한 데이터 구조를 정의하고, 이를 통해 반복적인 작업을 수

행할 수 있도록 지원합니다. 이를 통해 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다.


사용자 정의 이터러블 구현(웰폼드 이터러블/이터레이터 준수할것)

사용자 정의 이터러블을 구현하기 위해서는 객체에 Symbol.iterator 메서드를 구현해야 합니다. 이 메서드는 이터레이터 객체를 반환해야 합니다. 이터레이터는 next() 메서드를 구현하여 값을 차례대로 반환하고, value와 done 속성을 갖는 객체를 반환해야 합니다.

아래는 사용자 정의 이터러블인 웰폼드 이터러블을 구현하는 예시입니다:

// 사용자 정의 이터러블 구현
const wellFormedIterable = {
  data: ['Apple', 'Banana', 'Cherry'],
  
  [Symbol.iterator]() {
    let currentIndex = 0;

    // 이터레이터 객체 반환
    return {
      next: () => {
        // currentIndex가 데이터의 길이보다 작은 경우
        if (currentIndex < this.data.length) {
          // 현재 값을 반환하고 currentIndex를 증가시킴
          return {
            value: this.data[currentIndex++],
            done: false
          };
        }

        // 순회가 끝난 경우
        return { done: true };
      }
    };
  }
};

// 웰폼드 이터러블 사용
for (const item of wellFormedIterable) {
  console.log(item);
}

위 예시에서 wellFormedIterable 객체는 Symbol.iterator 메서드를 구현하여 이터레이터 객체를 반환합니다. 이터레이터 객체는 next() 메서드를 가지고 있고, next() 메서드는 현재 값을 반환하고 done 속성을 갖는 객체를 반환합니다. 이를 통해 wellFormedIterable 객체는 for...of 루프를 통해 순회할 수 있습니다.

실행 결과는 다음과 같이 출력됩니다:

Apple
Banana
Cherry

이와 같이 사용자 정의 이터러블을 구현하여 순회 가능한 데이터 구조를 생성할 수 있습니다.


웰폼드 이터러블/이터레이터 준수는 이터러블과 이터레이터 프로토콜을 따르는 객체를 의미합니다. 이를 준수하는 객체는 Symbol.iterator 메서드를 구현하여 이터레이터 객체를 반환하고, 이터레이터 객체는 next() 메서드를 구현하여 값을 순차적으로 반환해야 합니다.

이터러블/이터레이터 프로토콜을 준수하는 객체는 다음과 같은 특징을 가집니다:

  1. 이터러블 (Iterable):

    • Symbol.iterator 메서드를 가지고 있어야 합니다.
    • Symbol.iterator 메서드는 이터레이터 객체를 반환해야 합니다.
  2. 이터레이터 (Iterator):

    • next() 메서드를 가지고 있어야 합니다.
    • next() 메서드는 값을 순차적으로 반환하고, 반환된 값은 value와 done 속성을 가지는 객체여야 합니다.

위 예시에서 구현한 웰폼드 이터러블은 이터러블/이터레이터 프로토콜을 준수하도록 구현되었습니다. 객체는 Symbol.iterator 메서드를 구현하여 이터레이터 객체를 반환하고, 이터레이터 객체는 next() 메서드를 구현하여 값을 순차적으로 반환합니다. 이를 통해 for...of 루프와 같은 순회 문맥에서 사용할 수 있습니다.

이터러블/이터레이터 프로토콜을 준수하는 것은 자바스크립트에서 순회 가능한 데이터 구조를 일관성 있게 다룰 수 있도록 도와주는 중요한 개념입니다. 이를 통해 다양한 반복 작업을 수행하고 코드를 더 유연하고 읽기 쉽게 구성할 수 있습니다.

0개의 댓글