for...of
문
for...of
문은 순회 가능한 이터러블(iterable) 객체를 순회하는 반복문입니다.
이터러블 객체는 내부 요소를 하나씩 순회할 수 있는 객체를 말합니다.
for...of
문을 사용할 때 주의해야 할 특징과 주의사항 등에 대해 알아봅니다.
for...of
문과 이터러블 객체의 개요
for...of
문은 ECMAScript 2015 (ES6)부터 도입된 자바스크립트의 반복문 중 하나입니다.
이 문법은 DOM 컬렉션 객체의 각 요소를 반복하여 작업하는 데 매우 용이한 방법을 제공합니다.
DOM 컬렉션 객체인 HTMLCollection
과 NodeList
는 모두 유사 배열 객체이면서 이터러블 객체입니다.
이 때, "이터러블 객체"라는 개념이 중요한 역할을 합니다.
이터러블 객체의 개념과 중요성
for...of
문은 이터러블 객체의 순회를 위해 고안된 것입니다.
for...of
문을 이해하고 사용하기 위해서는 무엇보다도 이터러블 객체에 대한 개념을 이해하고 있어야 합니다.
이터러블 프로토콜
ES6 이전에는 순회 가능한 객체에 대해 통일된 규약이 없었습니다.
예를 들면 배열, 문자열, 유사 배열, DOM 컬렉션 등은 통일된 규약이 아닌 나름대로의 데이터 구조를 가지고 for
문, for...in
문, forEach()
메서드 등 나름의 방법으로 순회를 할 수 있었습니다.
그래서, 자바스트립트는 순회 가능한 객체에 대해 통일된 규약을 만들었습니다. 이 규약이 "이터러블 프로토콜"입니다. 이터러블 프로토콜은 자바스크립트에서 이터러블 객체를 정의하고 사용하기 위한 규약을 말합니다. 이터러블 객체는 이터러블 프로토콜을 준수한 객체입니다.
이터러블 객체는 순회 가능한 데이터 컬렉션, 즉 자바스크립트에서 이터러블 객체를 정의하고 사용하기 위한 규약(프로토콜)을 말합니다. 이터레이션 프로토콜은 Symbol.iterator
메서드와 이터레이터(iterator
) 객체, 이 두 가지 주요 요소로 이루어져 있습니다. 이것이 for...of
문을 사용할 수 있는 근간입니다.
복잡하게 생각할 수 있으나 내부적인 구조나 기전은 잠시 미루겠습니다. 하지만, 중요한 점이 있습니다.
이터러블 객체는 for...of
문으로 통일되게 순회할 수 있습니다. 이 점이 중요합니다.
이터러블 객체의 종류
- 배열: 배열의 각 요소를 순회하고 작업을 수행할 수 있습니다.
- 문자열: 문자열의 각 문자에 접근하여 조작할 수 있습니다.
Map
과Set
: 키-값 쌍을 가진Map
이나 유일한 값만을 갖는Set
을 순회하여 처리할 수 있습니다.
for...of
문을 사용면 이터러블 객체를 순회하여 각 요소에 접근하고 데이터 처리할 수 있습니다.
주의하세요! 배열이 아닌 객체(객체 리터럴, 클래스 등)은 기본적으로 이터러블 객체가 아닙니다.
for...of
문 사용법
for...of
문은 자바스크립트에서 이터러블 객체를 순회하는 반복문입니다.
기본 문법과 작동 원리
for...of
문의 기본 문법은 다음과 같습니다.
variable
: 반복문 내에서 현재 순회 중인 요소를 저장할 변수의 이름을 지정합니다. 이 변수는 반복문의 각 순회에서 업데이트되어 각 요소에 대한 작업에 사용됩니다.iterable
: 반복하고자 하는 이터러블 객체입니다. 배열, 문자열,Map
,Set
,NodeList
등 다양한 객체를 순회할 수 있습니다.
예시를 통해 이해를 돕겠습니다.
2
3
4
5
위의 코드에서 item
은 각 순회마다 배열 iterable
의 요소로 업데이트되며, console.log(item)
코드가 실행됩니다. 결과적으로 배열의 각 요소가 출력됩니다.
더 자세한 내용을 살펴보겠습니다.
e
l
l
o
이번에는 문자열을 이터러블로 사용하여 문자열의 각 문자에 접근하고 출력합니다.
DOM 컬렉션인 NodeList
이나 HTMLCollection
을 이터러블로 사용하여도 비슷한 방식으로 요소에 접근할 수 있습니다.
<div></div>
<div></div>
<div></div>
이처럼 for...of
문은 다양한 이터러블 객체를 순회하고 각 요소에 접근하여 작업을 수행하는데 사용됩니다. for...of
문은 내부적으로 이터레이터 프로토콜을 사용하여 순회하므로, 사용자 정의 이터러블 객체에도 적용할 수 있습니다.
for...of
문의 주의해야 할 특징
- 인덱스 정보 누락
- 객체 순회 시 주의
인덱스 정보 누락
for...of
문은 요소에 접근하기 위한 반복 변수만 제공합니다. 배열의 인덱스에 직접적으로 접근하는 방법이 없으므로 인덱스 정보를 필요로 하는 경우에는 for...of
문보다는 전통적인 for...in
문이나 forEach()
메서드를 사용하는 것이 좋습니다.
위의 코드에서 for...in
문을 사용하면 배열의 인덱스와 요소에 접근할 수 있으며, forEach
메서드 역시 마찬가지로 요소에만 접근할 수 있습니다. for...of
문은 각 요소에 대한 접근만 가능하며, 인덱스 정보를 직접적으로 얻을 수는 없습니다.
객체 순회 시 주의
for...of
문은 객체 순회에는 사용되지 않습니다. 객체의 프로퍼티 순회에는 for...in
문이 더 적합합니다.
올바른 방법은 for...in
문이나 Object.keys()
, Object.values()
, Object.entries()
메서드를 사용하는 것입니다.
명세서
명세서 사양 | |
---|---|
for...of
|
ECMAScript Language Specification #sec-for-in-and-for-of-statements |
브라우저 호환성
문 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
---|---|---|---|---|
for...of
|
38 | 12 | 13 | 7 |
같이 보기
- 자바스크립트 forEach() 함수 – 개념 정리 및 사용 예제
- 자바스크립트 for…in 문 – 객체의 프로퍼티를 순회하는 반복문
- 자바스크립트 for…in 문과 for…of 문의 차이
- 자바스크립트 for 문 - 특정 횟수나 범위만큼 반복
- 자바스크립트 while 문 - 조건식이 참인 동안 반복
- 자바스크립트 do...while 문 - 무조건 한 번 실행 후 조건식이 참인 동안 반복
- 자바스크립트 break 문 - 올바른 이해와 사용 방법
- 자바스크립트 continue 문 - 올바른 이해와 사용 방법
- 자바스크립트 스프레드(…) 문법 – 전개 구문
- 자바스크립트 HTMLCollection 이해하기
- 자바스크립트 NodeList 이해하기