Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Stress test
- Spring
- 헬름
- kubernetes
- 클라우드 네이티브
- devops
- Microservice
- MySQL
- 쿠버네티스
- 동기화
- Semaphore
- cloud native java
- Kotlin
- Adapter 패턴
- CRD
- decorator 패턴
- 마이크로서비스
- nGrinder
- 자바
- MSA
- java
- 익명클래스
- 머신러닝
- spring microservice
- 코틀린
- ingress
- Algorithm
- ansible
- 클라우드 네이티브 자바
- cloud native
Archives
- Today
- Total
카샤의 만개시기
Kotlin Sequence(시퀀스) 본문
시퀀스는 순차적인 컬렉션으로 요소의 크기를 특정하지 않고, 나중에 결정할 수 있는 컬렉션이다.
예를 들어 특정 파일을 줄 단위로 읽어서 마지막 라인 수를 모를때 사용할 수 있다.
따라서 시퀀스는 처리 중에는 계산하고 있지 않다가 toList()
나 count()
와 같은 최종 연산에 의해 결정 된다.
generateSequence()로 생성
fun main() {
// 시드값 1을 시작으로 1씩 증가하는 시퀀스 정의
val nums: Sequence<Int> = generateSequence(1) { it + 1 }
// take()를 사용해 원하는 요소 개수만큼 획득하고 toList()를 사용해 List 컬렉션으로 반환
println(nums.take(10).toList())
}
위 코드에서 take(10)을 했을때까지는 시퀀스를 어떻게 처리할지 정의만 한것이고,
실제 실행은 toList()를 호출했을때 이루어진다.
asSequence()
fun main() {
// 단순 메서드 체이닝을 사용할 때
val list1 = listOf(1, 2, 3, 4, 5)
val listDefault = list1
.map { println("map($it) "); it * it }
.filter { println("filter($it) "); it % 2 == 0 }
// asSequence()의 사용
val listSeq = list1.asSequence()
.map { print("map($it) "); it * it }
.filter { println("filter($it) "); it % 2 == 0 }
.toList()
}
단순 메서드 체이닝 했을때는 map의 전체 결과값을 저장하고 이후에 filter를 실행하는데asSequence()
를 사용하면 map의 전체 결과값을 저장하고 filter를 수행하는것이 아니라,
개별적으로 map과 filter를 병렬적으로 수행하기 때문에, 중간 과정에서 변수를 저장하지 않아 속도나 메모리 측면에서 훨씬 좋은 성능을 얻을 수 있습니다.
하지만 filter() 등은 인라인 함수로 설계되어 있는데, 시퀀스를 사용하면 람다식을 저장하는 객체로 표현되기 때문에 인라인되지 않아 작은 컬렉션에는 오히려 좋지 않습니다.
참고
서적 : Do it! 코틀린 프로그래밍
'Kotlin' 카테고리의 다른 글
Kotlin Coroutine(코루틴) - 문맥(Context)과 제어 (0) | 2019.12.13 |
---|---|
Kotlin Coroutine(코루틴) - 개념과 사용법 (0) | 2019.12.08 |
코틀린의 DSL (Domain-Specific Language)과 DslMarker (0) | 2019.12.08 |
Kotlin takeIf와 takeUnless함수 (0) | 2019.12.08 |
Kotlin Scope Functions (apply, with, let, also, run, use) (0) | 2019.12.08 |
Comments