티스토리 뷰

Dev/Kotlin

Kotlin_Sequence vs Iterator

Dev gOm 2017. 11. 8. 16:54

Intro

Kotlin으로 작업 중 문득 Sequence와 Iterator에 대한 구체적인 차이점에 대해 의문이 생겨서 포스팅.
Sequence와 Iterator둘다 kotlin에서 제공하는 interface이며 많은 extension이 구현되어있다.
다만 sequence의 경우 kotlin-stdlib에 포함되어있는 최상위 interface이며 iterator의 경우 kotlin.collections에 포함되어 구현되어져 있다. 다만, 대부분의 extension이 함께 사용되어지며 표면상으로는 큰 차이점을 확인 할 수 없다.

Sequence vs Iterator

앞서 언급했듯이 interface상에서의 차이는 크게 찾아볼수 없다.
Kotlin Doc을 찾아본 결과 두 기능의 가장 큰 차이는 intermediate operation의 동작이 lazily한가 안한가의 차이인듯 하다. 
iterator의 경우 모든 non-lazy가 기본이기 때문에 다양한 intermediate operation 호출 시 "즉시" 처리되며 그에 따른 최적화가 되어있으며 sequence의경우 lazy가 가능한 intermediate operation 호출 시 전부 lazily하게 동작한다.
따라서 본인이 구현하고자하는 목적에 맞게끔 원하는 기능을 사용면된다.
일반적으로 "작은" 단위에 collections에 대한 lazyliy한 동작은 많은 overhead를 발생시키며 이때 iterator를 활용하여 처리하면 된다. Java 8 부터 제공하는 stream또한 lazy하게 동작하는 것이 default이며 이도 마찬가지로 작은 collections에 대한 처리는 따로 iterator를 활용하여 처리하는것이 바람직하다.
(작은 단위의 collections을 lazy하게 처리[각주:1]하는것보다 operation발생시점에 sequential하게 바로 처리하는것이 훨씬 효과적일것이다.)


Reference

Kotlin - Sequnece

Kotlin - Iterator

Java - Stream


  1. 기본적으로 java,kotlin에서 제공하는 collections 에 대한 lazy한 처리는 map-reduce를 토대로 만들어진다. [본문으로]

'Dev > Kotlin' 카테고리의 다른 글

Kotlin_FileTreeWalk  (0) 2017.11.06
Kotlin Overview  (0) 2017.10.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함