- 채널만으로 부족하다라는 것을 깨닫음.
- 채널은 값을 핫 스트림으로 가지지만, 콜드 스트림이 필여힐 때가 있음
- 핫 데이터, 콜드 데이터 차이를 이해하는 것이 소프트웨어적인 측면에서 상당히 유용하다 할 수 있다.
- List, Set과 같은 컬렉션은 핫 이며,
- Sequence 와 Stream 은 콜드입니다
- Channel 은 핫이지만, Flow 와 (Observable, Sigle 과 같은)RxJava 스트림은 콜드입니다.
- 핫 VS 콜드
- 핫 데이터 스트림은 열정적이라 데이터를 소비하는 것과 무관하게 원소를 생성하지만
- 핫 데이터 스트림의 빌더와 연산은 즉각 실행됩니다.
- 콜드 데이터 스트림은 게을러서 요청이 있을 때만 작업을 수행하며 아무것도 저장하지 않습니다.
- 콜드 데이터 스트림에서는 원소가 필요할 때까지 실행되지 않습니다.
- 핫 데이터 스트림은 열정적이라 데이터를 소비하는 것과 무관하게 원소를 생성하지만
fun main6_1() {
val l = buildList {
repeat(3) {
add("User $it")
println("L: Added User $it")
}
}
val l2 = l.map {
println("L2: Processing $it")
"Processed $it"
}
val s = sequence {
repeat(3) {
yield("User $it")
println("S: Added User $it")
}
}
val s2 = s.map {
println("S2: Processing $it")
"Processed $it"
}
buildList 함수:
buildList는 Kotlin에서 리스트를 구성하는 빌더 패턴의 일부입니다. 이 함수를 사용하면 블록 안에서 리스트의 요소를 동적으로 추가할 수 있습니다. 이 경우 repeat(3)을 사용하여 세 번 반복하며, 각 반복마다 "User $it"라는 문자열을 리스트에 추가합니다. 여기서 $it는 현재 반복의 인덱스를 나타냅니다.
buildList 내에서 리스트에 요소를 추가한 후, 이 리스트는 변경할 수 없는 List로 반환됩니다. 이 코드에서는 l이 그러한 리스트입니다.
따라서 l.map {...} 부분에서는 l 리스트의 각 요소를 순회하며 "L2: Processing $it"를 출력하고, 각 요소 앞에 "Processed "를 붙여 새 리스트 l2를 생성합니다.
sequence 함수:
sequence는 지연된 컬렉션(lazy collection)을 생성하는 함수입니다. 즉, 시퀀스의 요소들은 필요할 때까지 계산되지 않고, 요소들이 요청될 때(iterator를 통해) 실제로 생성됩니다.
이 예제에서 repeat(3)을 사용하여 "User $it"라는 문자열을 시퀀스에 yield하고 있습니다. yield는 시퀀스에 요소를 하나씩 추가합니다. 하지만 이 값들은 s 시퀀스를 실제로 순회하기 전까지 생성되지 않습니다.
s.map {...} 부분에서는 s 시퀀스의 각 요소에 대해 지연 처리가 적용됩니다. 즉, 실제 s2 시퀀스의 요소를 순회하는 시점에 "S2: Processing $it"가 출력되고, "Processed $it"로 변환되는 것입니다.
- 콜드 데이터 스트림은
- 무한할 수 있다
- 최소한의 연산만 수행한다
- 메모리를 적게 사용한다.
- https://jeong0427.tistory.com/171 참고해도될듯(2장 - 시퀀스빌더)
- 핫 데이터 스트림은
- 항상 사용 가능한 상태입니다.(각 연산이 최종 연산이 될 수 있다)
- 여러 번 사용되었을 때 매번 결과를 다시 계산할 필요가 없다.
- 핫 채널, 콜드 플로우
- 플로우를 생성하는 가장 일반적인 방법은 produce 함수와 비슷한 형태의 빌더를 사용하는 것입니다.
- 채널은 핫이라 곧바로 계산을 수행합니다.
'공부 > 코틀린코루틴:딥다이브(마르친 모스카와)' 카테고리의 다른 글
30장 - 모범 사례 (1) | 2024.03.16 |
---|---|
29장 - 코루틴을 시작하는 것과 중단 함 숮 어떤 것이 나을까? (0) | 2024.03.16 |
16장 - 채널 (1) | 2024.03.02 |
14장 - 공유 상태로 인한 문제 (0) | 2024.03.01 |
13장 - 코루틴 스코프 만들기 (0) | 2024.02.26 |
댓글