반복기 이해하기

omnigi·2022년 2월 25일
0

Typescript Do it

목록 보기
16/23

반복기와 반복기 제공자

for ...of 구문은 타입에 무관하게 배열에 담긴 값을 차례로 얻는 데 활용됩니다.

const numArray: number[] =[1, 2, 3]
for(let value of numArray)
    console.log(value)

const strArray: string[] = ["hello", "world", "!!"]
for(let value2 of strArray)
    console.log(value2)

함수가 return값으로 메서드가 있는 객체를 전달하면 해당 함수는 반복기를 제공하는 역할을 합니다.
반복기를 제공하는 역할을 하는 함수를 "반복기 제공자"라고 합니다.

반복기가 필요한 이유

반복기 제공자는 어떤 범위의 값을 한꺼번에 생성해서 배열에 담지않고 값이 필요할 때만 생성하기 때문에
시스템 메모리의 효율성이 많이 좋습니다.

Iterable< T >와 Iterator< T>인터페이스

타입스크립트는 반복기 제공자에 Iterable< T> 와 Iterator< T>제네릭 인터페이스를 사용할 수 있습니다. Iterable< T>

class 구현 클래스 implements Iterable<생성할 값의 타입> {}

Iterator< T>는 반복기가 생성할 값의 타입을 명확하게 해줍니다.

[Symbol.iterator](): Iterator<생성할 값의 타입> {}

for...of 구문과 [Symbol.iterator]메서드

RangeIterable.ts

export class RangeIterable {
    constructor(public from: number, public to: number) {}
    [Symbol.iterator]() {
      const that = this
      let currentValue = that.from
      return {
        next() {
          const value = currentValue < that.to ? currentValue++ : undefined
          const done = value == undefined
          return { value, done }
        }
      }
    }
  }

RangeIterable-test.ts

import { RangeIterable } from "./06/RangeIterable";

const iterator = new RangeIterable(1, 3 + 1)

for(let value of iterator)
    console.log(value)

Iterable< T >과 Iterator< T > 인터페이스

타입스크립트는 반복기 제공자에 Iterable< T > 와 Iterator< T > 제네릭 인터페이스를 사용할 수 있습니다.
Iterator< T >는 자신을 구현하는 클래스가 [Symbol.iterator]메서드를 제공한다는 것을 겸확하게 알려주는 역할을 합니다.

class 구현클래스 implements Iterable<생성할 값의 타입>{}

또한 Iterator< T >는 반복기가 생성할 값의 타입을 명확하게 해줍니다.

Symbol.iterator: Iterator<생성할 값의 타입> {}

0개의 댓글