728x90
- 코틀린 시퀀스는 데이터를 연속적으로 처리하는 데 사용되는 컬렉션 타입 중 하나
- 요구되는 연산을 최소한으로 수행
- 무한정이 될 수 있음
- 메모리 사용이 효율
- 시퀀스 좀 알고 갈까
- 리스트를 사용할 경우
- val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val result = mutableListOf<Int>()
for (number in numbers) {
if (number % 2 == 0) {
val squared = number * number
result.add(squared)
}
}
println(result) // [4, 16, 36, 64, 100]
- 위 코드는 리스트를 사용하여 짝수를 찾고 제곱한 값을 구합니다. 중간 결과를 담을 result 리스트를 생성하고, 반복문을 통해 필터링 및 제곱을 수행합니다.
- val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
- 시퀀스를 사용한 경우
- val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val result = numbers.asSequence()
.filter { it % 2 == 0 } // 짝수 필터링
.map { it * it } // 제곱 연산
.toList() // 최종 결과를 리스트로 변환
println(result) // [4, 16, 36, 64, 100]
- 위 코드는 시퀀스를 사용하여 짝수를 찾고 제곱한 값을 구합니다. asSequence()를 사용하여 리스트를 시퀀스로 변환하고, filter로 짝수를 필터링하며, map으로 제곱 연산을 합니다. 중간 결과를 생성하지 않고 필요한 시점에서만 연산이 수행되므로, 메모리와 연산을 더 효율적으로 사용합니다.
- 그래서 뭐가 좋은데?
- 지연 평가 (Lazy Evaluation):
- 시퀀스는 연산을 지연시킵니다.
- 중간 연산인 filter, map 등이 호출되더라도 실제 연산이 수행되지 않고 대기함.
- 모든 연산을 끝까지 실행하지 않고, 필요한 시점에서만 실행한다는 의미.
- 연산을 중간에 중단하거나 조건에 따라 실행 여부를 결정할 수 있다.
- 모든 데이터를 한 번에 메모리에 로드하지 않고, 데이터를 순차적으로 읽어들이므로 메모리 효율성 향상.
- 중간 결과 생성 최소화:
- 중간 결과를 생성하지 않고 연산을 수행합니다.
- 예를들어 리스트를 사용할 때 중간 결과를 저장하기 위해 새로운 리스트를 만들어야 함.
- 시퀀스는 중간 결과를 생성하지 않고 필터링 및 매핑 연산을 미뤄두어, 중간 결과를 생성하는 비용이 없어지므로 연산이 더 효율적으로 수행
- 이러한 장점은 대용량 데이터를 처리할 때 더욱 좋음
- 주의할점?
- 정말 많은 데이터 ex)몇억개의 데이터를 처리할때는 메모리 상황과 효율성을 중요시 해야할듯.
- 청크 기반으로 데이터를 n 개 씩 나눠서 처리를 하던지.
- 코루틴을 사용하여 병렬로 처리를 하던지
- 정말 많은 데이터 ex)몇억개의 데이터를 처리할때는 메모리 상황과 효율성을 중요시 해야할듯.
- 지연 평가 (Lazy Evaluation):
- val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
- 리스트를 사용할 경우
728x90
'공부 > 코틀린코루틴:딥다이브(마르친 모스카와)' 카테고리의 다른 글
7장 - 코루틴 컨텍스트 (0) | 2024.01.29 |
---|---|
6장 - 코루틴 빌더 (0) | 2024.01.29 |
4장 - 코루틴의 실제 구현 (2) | 2024.01.14 |
3장 - 중단은 어떻게 작동할까? (0) | 2024.01.13 |
1장 - 코틀린 코루틴을 배워야 하는 이유 (0) | 2024.01.13 |
댓글