시퀀스 (Sequences)
- Collections과 같은 Iterable한 자료구조임
- Collections와 연산방식에 차이점이 있음
- Collections은 기본적으로 Eager evaluation이고, Sequences은 Lazy evaluation임
Lazy evaluation / Eager evaluation
종류 |
방식 |
Kotlin Collections |
Eager evaluation |
Kotline Sequences |
Lazy evaluation |
Java Streams |
Lazy evaluation |
- Lazy evaluation : 지금 하지 않아도 되는 연산을 최대한 미루고, 필요한 순간에 연산을 수행하는 방식
- Eager evalutation : 수행해야 할 연산이 있으면 미루지 않고 바로 처리하는 방식
- 큰데이터를 연산할 경우 Lazy 방식이 좋음
시퀀스 사용
fun main() {
listOf("사과", "수박", "귤")
.asSequence() //시퀀스 사용
.filter {
println("과일 이름 길이 확인 : $it")
it.length > 1
}
.map {
println("과일 이름 길이 1자리 초과 : $it")
"${it.length}"
}
.toList()
}
//시퀀스
과일 이름 길이 확인 : 사과
과일 이름 길이 1자리 초과 : 사과
과일 이름 길이 확인 : 수박
과일 이름 길이 1자리 초과 : 수박
과일 이름 길이 확인 : 귤
//컬렉션
과일 이름 길이 확인 : 사과
과일 이름 길이 확인 : 수박
과일 이름 길이 확인 : 귤
과일 이름 길이 1자리 초과 : 사과
과일 이름 길이 1자리 초과 : 수박
- asSequence()를 선언하게 되면 Collections가 Sequence로 변환
- Sequence로 변환되면 연산이 필터 조건에 초과되면 바로 map으로 처리함 (Lazy 처리)
- 1개의 아이템만 찾으면 모든 요소에 대해서 필터를 수행할 필요가 없어짐
정리
- Sequence는 연산을 바로 실행하지 않고 나중에 한원소에 일련의 연산들을 한번에 하기 때문에 빠른 속도로 처리함