TypeScript 5.6의 Iterator Helper 메서드 도입과 실무 적용

배경

데이터 파이프라인 처리 로직에서 대용량 CSV 파싱 시 메모리 이슈가 있었다. 전체를 배열로 변환하지 않고 제너레이터로 처리하고 있었는데, 중간 변환 로직이 for...of 루프로 도배되어 가독성이 떨어졌다.

TypeScript 5.6에서 Iterator Helper가 정식 지원되면서 이 부분을 개선할 수 있었다.

기존 코드

function* parseCSV(file: string) {
  // CSV 파싱 로직
  yield row;
}

function processData(file: string) {
  const results = [];
  for (const row of parseCSV(file)) {
    if (row.status === 'active') {
      const transformed = {
        id: row.id,
        name: row.name.trim()
      };
      results.push(transformed);
    }
  }
  return results;
}

Iterator Helper 적용

function processData(file: string) {
  return parseCSV(file)
    .filter(row => row.status === 'active')
    .map(row => ({
      id: row.id,
      name: row.name.trim()
    }));
}

배열 메서드와 동일한 방식으로 체이닝할 수 있어 코드가 훨씬 선언적으로 바뀌었다. lazy evaluation이 유지되어 메모리 효율도 그대로다.

주의사항

Iterator Helper는 새 이터레이터를 반환하므로 최종적으로 배열이 필요하면 Array.from()이나 toArray() 메서드를 사용해야 한다. 또한 런타임 환경이 ES2024 이상을 지원해야 하므로 tsconfig의 target과 lib 설정 확인이 필요했다.

{
  "compilerOptions": {
    "target": "ES2024",
    "lib": ["ES2024"]
  }
}

결과

제너레이터 기반 코드의 가독성이 크게 개선됐다. 특히 여러 단계의 변환이 필요한 데이터 처리 파이프라인에서 효과가 좋았다.