Iteration Protocols(순회 규약)
Iteration Protocols은 자바스크립트의 새로운 객체나 문법이 아니라, 순회(Iteration, 반복)을 표준화하기 위한 규칙(protocols)입니다.
이 규약은 ECMAScript 2015(ES6) 이후 배열, 문자열, Map
, Set
등 다양한 객체를 일관되게 순회할 수 있게 하는 공통 인터페이스(Common Iteration Interfaces)를 제공합니다.
자바스크립트의 도입 초기에는 순회에 대한 명확한 규칙이 없었습니다.
배열, 객체, 문자열, DOM 컬렉션 등 다양한 객체가 있었지만, 순회가 필요하면 내부 메서드나 반복문을 직접 사용해야 했습니다.
즉, 객체마다 순회 방식이 달라 혼란스러운 상황이 발생했습니다.
하지만 자바스크립트가 발전하면서 Map
, Set
같은 새로운 컬렉션 객체가 등장했고, 이를 다루기 위해 표준화된 순회 규칙이 필요했습니다.
그래서 고안된 것이 바로 Iteration Protocols입니다.
즉, 객체의 순회는 어떤 규칙으로 적용되는지에 대한 두 가지 공통 인터페이스(Common Iteration Interfaces)를 명세서로 규정한 것입니다.
규약의 적용 시점
앞서 언급한 바와 같이, 이 규약은 ECMAScript 2015(ES6) 이후 발표되었습니다.
이전의 순회 방식은 호환성을 위해 그대로 유지되며, 발표 이후 등장한 새로운 객체의 순회에서는 이 규약이 적용됩니다.
두 가지 규칙
Iteration Protocols에는 순회를 정의하는 두 가지 인터페이스에 대한 규칙이 있습니다.
- Iterable Interface
- Iterator Interface
Iterable Interface - 순회 가능한 객체에 대한 인터페이스
Iterable Interface는 객체가 순회 가능한지 여부를 정의하는 인터페이스입니다.
이 정의를 가지는 객체는 다음과 같은 특징을 가집니다.
- 객체에
@@iterator
(즉,Symbol.iterator
메서드)가 있어야 합니다. for...of
문으로 순회할 수 있습니다.
Iterator Interface - 실제 순회를 수행하는 인터페이스
Iterator Interface는 순회 가능한 객체를 실제로 순회할 때 사용하는 인터페이스를 정의합니다.
이 정의를 가지는 객체는 다음과 같은 특징을 가집니다.
- 객체가
next()
메서드를 구현해야 합니다. - 이때,
next()
메서드는{ value, done }
객체를 반환해야 합니다.
세부 관련 규정과 추가 인터페이스 사항은 명세서의 공통 인터페이스(Common Iteration Interfaces)를 참고하세요!
규약이 적용되는 객체
Iteration Protocols은 ECMAScript 2015(ES6) 이후에 도입되어, 특정 객체들에 적용됩니다.
다음은 이 규약이 적용되는 대표적인 객체들입니다.
Iteration Protocols이 적용되는 객체를 공식 용어는 아니지만 통상적으로 '이터러블 객체'라고 부릅니다.
- 문자열(String)
- 배열(Array)
Map
Set
간단한 예제
앞서 언급한 것처럼 Iteration Protocols이 적용되는 객체는 for...of
문으로 순회할 수 있습니다.
// 배열 순회
const arr = [10, 20, 30];
for (const value of arr) {
console.log(value); // 10, 20, 30
}
// 문자열 순회
const str = "abc";
for (const char of str) {
console.log(char); // a, b, c
}
// Map 순회
const map = new Map([["a", 1], ["b", 2]]);
for (const [key, value] of map) {
console.log(key, value); // a 1, b 2
}
// Set 순회
const set = new Set([1, 2, 3]);
for (const value of set) {
console.log(value); // 1, 2, 3
}
유용성
Iteration Protocols의 도입으로 자바스크립트의 순회는 다음과 같은 장점을 가지게 되었습니다.
- 이 규약 발표 이후 등장한 새로운 객체의 순회에서는 동일한 순회를 할 수 있어 별도의 순회 방식을 고민할 필요가 없어졌습니다.
- 사용자 정의 객체를 만들어 사용할 때에도 순회가 필요하면 이 규약을 지키면 표준화된 순회를 할 수 있습니다.
- 개발자는 순회에 대해 편리하고 일관된 인터페이스를 활용할 수 있습니다.
명세서
명세서 사양 | |
---|---|
Iteration |
ECMAScript® 2026 Language Specification #sec-iteration |