Collection 객체
for of 구문을 사용하기 위해선 Collection 객체가 [Symbol.iterator] 속성을 가지고 있어야만 합니다.
for of는 이터러블한 객체의 순회를 도와주는 반복문이다. (객체에는 사용불가)
내부에 [Symbol.iterator]를 가진 객체라면 어떤 객체든 순회할 수 있다.
하지만 iterable하지 않은 일반 Object에는 사용할 수 없다.
Object 객체
배열을 반복하면서 콜백 함수가 필요한 경우
forEach는 Array의 prototype을 상속받은 객체가 사용할 수 있는 함수이다.
반복문이 아니라 '함수'이다. 인자로 함수를 받아 각 배열의 요소에 해당 함수를 적용한다.
for ... in은 다른 반복문으로 충분히 대체 가능한데 그럼 for ... in은 왜 쓰는 것일까?
for...of 루프:
Copy code
const iterable = [1, 2, 3];
for (const value of iterable) {
console.log(value); // 1, 2, 3
}
for...in 루프:
Copy code
const obj = { a: 1, b: 2, c: 3 };
for (const key in obj) {
console.log(key); // "a", "b", "c"
console.log(obj[key]); // 1, 2, 3
}forEach() 메서드:
Copy code
const arr = [1, 2, 3];
arr.forEach((value, index) => {
console.log(`Value at index ${index}: ${value}`);
});
요약하면, for...of는 반복 가능한 객체 순회용, for...in은 객체 프로퍼티 순회용, forEach()는 배열 요소 반복용입니다. 각각의 선택은 사용하려는 데이터 구조 및 요구사항에 따라 달라질 것입니다.
이터러블 프로토콜:
이터레이터 프로토콜:
이터레이터 프로토콜을 준수한 객체를 이터레이터로, 이터러블 프로토콜을 준수한 객체를 이터러블로 부른다
제너레이터 함수는 일반 함수와 비슷하게 정의되지만 함수 내부에서 실행 흐름을 일시적으로 중단하고 이어서 실행할 수 있는 특별한 객체를 반환합니다. 이러한 중단과 재개는 개발자가 제어할 수 있으며, 이를 통해 비동기 코드를 더 쉽게 관리하고 복잡한 순회 작업을 수행할 수 있습니다.
제너레이터 함수는 다음과 같은 특징을 가집니다:
유사 배열 객체인 arguments,NodeList, HTMLCollection 객체에 Symbol.iterator 메서드를 구현하여 이터러블로 사용 가능
이 메서드는 이터레이터 객체를 반환하고, 이 이터레이터 객체는 next 메서드를 가지고 있어 각 요소를 차례로 반환합니다.
이렇게 구현된 객체를 for...of 루프나 다른 이터레이션 메커니즘을 사용하여 순회할 수 있습니다.