심플하다. 뜻 그대로 어떠한 작업을 '반복'할 때 위와 같은 개념을 사용한다.
( 사실 이 글을 쓰기전에 Iteration 이 무슨 뜻인지도 몰랐다... 허허헣 )
프로그래밍을 할때 심심찮게 '반복' 과 관련된 작업들을 많이 한다 .... Ex) for문, forEach( ) ....
특정 문자를 반복해서 출력하거나, 배열 내부에 있는 특정 원소를 탐색하기 위해서도 반복문을 자주 사용하곤 했다.
그러다보니, 자연스럽게 어떠한 연결된 '뭉치'에서는 이러한 반복 개념을 통해 뭔가 원하는 작업을 할 수 있겠다라는 생각을 했다. 실제 지금까지도 그렇게 개발을 했었고.
이제는 조금 더 디테일하게 Iteration(반복)에 대한 것을 다뤄볼때가 온 것 같다.
일단 Javascript ES6 에서는 [ Iterable Object ] 라는 것이 도입되었다. 뜻 그대로 '반복 가능한 객체' 이다.
그렇다면 어떻게 위와 같은 '반복 가능한 객체'를 어떻게 판별해내는 것일까.
거두절미하고 본론부터 말하자면, 'Symbol.iterator' 라는 것이 객체 내부에 존재할 때,
'반복 가능한 객체' 로 정의되어 진다.
여기서 ' Symbol ' 에 대해서 잠깐 짚고 넘어가자면,
ES6에서 새롭게 도입된 데이터 타입이며 ( 이전의 타입들: undefined, null, boolean, number, string, object ), 기존의 자바스크립트 개발자들이 객체(Object)에 별도의 변경과정 없이 새로운 프로퍼티를 내부에 추가하기 위해 만들어진 것이다.
[ Symbol ] 을 이용한 객체 key-value 사용 예시 코드.
위의 코드를 보면, 직접 Symbol 에 대한 키값으로 접근하지 않는 이상, 그 Key값에 대한 Value를 얻어낼 수 없다. 이것은 즉, '식별' 이라는 것을 가능하게 해주는 것과 동일한 의미이다.
아무튼 이렇게 고유성을 부여해주는 Symbol 의 특징으로, ' 반복가능한 객체(Iterable Object) '들은 공통적으로 Symbol.iterator 라는 것을 지니고 있다.
그렇다면 실제로 한번 보자.
String, Number, Array 타입의 데이터로 실험을 해봤고, Number 타입의 데이터만 유일하게 'undefined'가 나왔다.
즉, Number 타입의 데이터를 제외한 위의 나머지 타입의 데이터는 '반복가능한 객체' 라는 것이다.
( * 실제 위 데이터로 반복가능 여부를 아래와 같이 알아보았다. )
**그리고 [ Symbol.iterator ]는 next( ) 라는 메서드를 가질 수 있는 데, 아래와 코드를 보면 이해가 될 것이다.
더이상 뱉어낼 문자열이 없다면 done: true 값을 리턴하면서, iteration 작업이 완료되었음을 알려준다.
후기.
어렴풋이 Number 타입은 당연히 반복이 안될거라는 생각만 이전에 했었고, 왜 안됬는지는 정확하게 몰랐다. 이번 기회를 통해 Symbol 이라는 새로운 타입의 데이터를 조금이나마 알게되고, 이와 관련해서 객체의 반복가능 여부를 결정짓는다는 것을 알게 된것만 해도 나름의 성과인 듯 하다.
[ES6] 6) Some, Every (0) | 2020.08.12 |
---|---|
[ES6] 5) Map, Filter (0) | 2020.07.20 |
[ES6] 4) 트리(Tree) (0) | 2020.07.15 |
[ES6] 3) 큐(Queue) / 스택(Stack) (0) | 2020.07.13 |
[ES6] 2) Class (0) | 2020.07.09 |
댓글 영역