이것도 자주 보는 단어인데 자세히 알지는 못하던 용어였다 그래서 이번에 찾아봤다.
이터러블(iterable) : 사전적 의미로는 반복될 수 있는 이라고 하고 Symbol.iterator 라는 프로퍼티를 가지고 이터레이터(iterator) 객체를 반환하는 객체라고 한다.
이터레이터(iterator) : 사전적 의미로는 반복자, next() 메서드를 가지고 순회할 수 있어야하며 이 때 메서드의 반환값은 이런 식으로 나와야한다. { value: value, done: boolean }
어렵다 어려워 그래서 만든 예제를 따라서 만들고 나름 해석을 해보고 건드려봤다
let range = { // 일반 객체
from: 1,
to: 5
};
range[Symbol.iterator] = function () { // 이제 이터러블이 됨
return { // 이터레이터 객체를 반환하니까
current: this.from, // 이게 왜 이터레이터인데?
last: this.to,
next() { // next() 메서드를 가지고
if (this.current <= this.last) { // 순회할 수 있으면서
return { done: false, value: this.current++ };
// 정해진 형태를 반환
} else {
return { done: true }; // 순회 끝
} // 이게 되니까
}
};
};
주석은 나름대로 이해한 것이다
- Symbol.iterator를 건드렸는데 이름을 바꾸거나 하면 작동이 안된다 정의 그대로 내용물 뿐 아니라 포장지도 중요하다
- next()를 다른 이름으로 바꿔도 마찬가지였다.
- 안에 done나 value도 정해진 규칙에 따라 건들면 동작에 문제가 생겼다.
먼저 else 부분을 don 이런 식으로 조금만 바꿔도 반복문에서 빠져나오질 못한다. 불리언 값을 반대로 해도 마찬가지였고 1이나 0을 추가하면 자동으로 불리언 값으로 형변환이 이루어졌다.
다음으로 value도 한 두 글자만 바꿔도 값을 가져오지 못했다.
이렇게 하니까 '이거 정품 인증인데' 라는 생각이 들었다 이름부터 가짜 티가 나는 유사 배열이라고 하는 것들이 있는데 비교하니 언뜻 비슷할 순 있지만 뭔가 부족한 정품 인증 같다는 생각이 들었다. 특히나 아이폰 정품 케이블이 비싸서 싼 벌크로 사다보면 처음엔 잘 되는 것 같다가 pc연결이 안된다던가 충전이 안된다던가 하는 문제가 생기는데 이번에 찾아보면서 비슷한 느낌이 들었다.
'오늘 뭐했냐 > 개발에 대한 주저리' 카테고리의 다른 글
| 23. 06.20 자료구조 2. 연결 리스트(Linked List) (0) | 2023.06.20 |
|---|---|
| 23. 06. 20 자료구조 1. 배열(Array) (0) | 2023.06.20 |
| 23. 06. 18 ES는 뭘까 (0) | 2023.06.18 |
| 23.06.17 인스턴스가 뭘까 (0) | 2023.06.17 |
| 23.06.15 콜백함수 (0) | 2023.06.15 |