KOTLIN

[KOTLIN] 시퀀스 (SEQUENCES)

집한구석 2022. 5. 22. 14:33
728x90

시퀀스 (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는 연산을 바로 실행하지 않고 나중에 한원소에 일련의 연산들을 한번에 하기 때문에 빠른 속도로 처리함

'KOTLIN' 카테고리의 다른 글

[KOTLIN] NULL SAFTY / NULL 처리방법  (0) 2022.05.30
[KOTLIN] LATEINIT / LAZY  (0) 2022.05.22
[KOTLIN] 확장함수  (0) 2022.05.22
[KOTLIN] Scope 함수  (0) 2022.05.18
[KOTLIN] 컬렉션  (0) 2022.05.18