2. 시퀀스 빌더
- 코틀린에서는 시퀀스를 생성할 때, 재너레이터 대신에 시퀀스 빌더;
sequence { }
를 제공한다.
시퀀스의 특징
- 지연 계산 (Lazy Evaluation): 시퀀스의 요소는 실제로 필요할 때까지 계산되지 않으므로, 메모리 사용량을 줄이고 성능을 향상시킬 수 있습니다.
- yield 함수:
yield
함수를 사용하여 시퀀스의 다음 요소를 생성합니다. - 중간 연산 및 최종 연산:
filter
,map
과 같은 중간 연산을 통해 시퀀스를 변환하고,toList
,forEach
와 같은 최종 연산을 통해 결과를 얻을 수 있습니다. - 무한 시퀀스 생성 가능:
generateSequence
함수를 사용하여 무한 시퀀스를 생성할 수 있습니다.
|
|
중단이 가능하기 때문에 main 함수와 시퀀스 제너레이터가 번갈아가면서 실행된다.
시퀀스 빌더는 내부적으로 중단 함수를 사용하여 지연 계산을 구현합니다.
public abstract suspend fun yield(value: T)
sequence { ... }
블록 내부에서yield
함수를 호출하면 해당 시퀀스는 일시 중단되고, 다음 요소가 필요할 때 다시 재개됩니다.시퀀스 빌더와 시퀀스가 작동하기 위해서는 중단(suspend)이 필요하다.
시퀀스 주의 사항
- 시퀀스 빌더 내에서는
yield
함수 이외의 중단 함수는 사용할 수 없습니다. - 즉, 시퀀스 빌더는 요소 생성과 소비가 동기적으로 이루어져야 합니다.
- 만약 시퀀스 빌더 내에서 비동기 작업을 처리해야 한다면
Flow
를 사용하는 것이 좋습니다.
- 만약 시퀀스 빌더 내에서 비동기 작업을 처리해야 한다면
Reference
- https://kotlinlang.org/docs/coroutines-guide.html
- 코틀린 코루틴 Kotlin Coroutines: Deep Dive (Marcin Moskała, 인사이트)