[typescript] 컬렉션이나 리스트 등의 객체 내부를 반복하여 접근하는 반복자 패턴과 타입스크립트의 결합 사례

반복자 패턴은 객체 내부를 순회하거나 접근하는 디자인 패턴으로, 컬렉션 내부를 캡슐화하고 각 요소에 접근하기 위한 인터페이스를 제공합니다. 이 패턴은 코드를 보다 모듈화하고 재사용성을 높이며, 클라이언트는 객체 내부 구조를 알 필요 없이 요소들에 접근할 수 있습니다.

타입스크립트는 정적 타입 체크와 타입 추론을 제공하여 코드의 안정성을 높이는 도구입니다. 이 글에서는 반복자 패턴을 타입스크립트로 구현하는 방법을 살펴보겠습니다.

인터페이스 정의

우선, 반복자 패턴을 구현하기 위해 컬렉션 객체에 대한 인터페이스를 정의합니다.

interface Iterator<T> {
  hasNext(): boolean;
  next(): T;
}

이 인터페이스는 hasNext 메서드로 다음 요소의 존재 여부를 파악하고, next 메서드로 실제 요소에 접근합니다.

컬렉션 구현

이어서 반복자 패턴을 구현할 컬렉션 객체를 정의합니다. 여기서는 간단한 숫자 배열을 다루는 예제로 설명하겠습니다.

class NumberCollection {
  private collection: number[];

  constructor(numbers: number[]) {
    this.collection = numbers;
  }

  getIterator(): Iterator<number> {
    let index = 0;
    return {
      hasNext: () => index < this.collection.length,
      next: () => this.collection[index++]
    };
  }
}

위 코드에서 NumberCollection 클래스는 Iterator 인터페이스를 구현한 getIterator 메서드를 제공하여 숫자 배열에 대한 반복자를 얻을 수 있도록 합니다.

사용 예제

마지막으로, 구현한 반복자 패턴을 타입스크립트로 사용하는 예제를 살펴보겠습니다.

const numbers = [1, 2, 3, 4, 5];
const collection = new NumberCollection(numbers);
const iterator = collection.getIterator();

while (iterator.hasNext()) {
  console.log(iterator.next());
}

위 예제에서는 NumberCollection 객체를 생성하고, 이를 통해 반복자를 얻어 숫자 배열의 요소들을 순회하며 출력합니다.

결론

타입스크립트는 반복자 패턴을 구현하고 사용할 때 정적 타입 체크를 통해 안전성을 보장하고, 코드의 가독성과 유지보수성을 높일 수 있습니다. 이를 통해 객체 내부 구조에 대한 의존성을 낮추고, 추상화를 통해 유연한 코드를 작성할 수 있습니다.