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"]
}
}
결과
제너레이터 기반 코드의 가독성이 크게 개선됐다. 특히 여러 단계의 변환이 필요한 데이터 처리 파이프라인에서 효과가 좋았다.