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>
class 구현 클래스 implements Iterable<생성할 값의 타입> {}
Iterator< T>는 반복기가 생성할 값의 타입을 명확하게 해줍니다.
[Symbol.iterator](): 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 > 제네릭 인터페이스를 사용할 수 있습니다.
Iterator< T >는 자신을 구현하는 클래스가 [Symbol.iterator]메서드를 제공한다는 것을 겸확하게 알려주는 역할을 합니다.
class 구현클래스 implements Iterable<생성할 값의 타입>{}
또한 Iterator< T >는 반복기가 생성할 값의 타입을 명확하게 해줍니다.
Symbol.iterator: Iterator<생성할 값의 타입> {}