Flow (19장 정의)
간단한 람다식부터 시작
fun main() {
val f: () -> Unit = {
print("A")
print("B")
print("C")
}
f()
f()
}
// ABCABC
내부에 지연이 있는 람다식 suspend
suspend fun main() {
val f: suspend () -> Unit = {
print("A")
delay(1000)
print("B")
delay(1000)
print("C")
}
f()
f()
}
// A(1초후)B(1초후)CA(1초후)B(1초후)C
// ABCABC
람다식은 함수를 나타내는 파라미터를 가질 수 있다 (emit)
suspend fun main() {
// suspend () -> Unit
// suspend ((String) -> Unit) -> Unit
val f: suspend ((String) -> Unit) -> Unit = { emit ->
emit("A")
emit("B")
emit("C")
}
f { print(it) }
f { print(it) }
}
// ABCABC
위의 복잡한 함수형 코드를 emit이라는 추상 메서드를 가진 FlowCollector 함수형 인터페이스로 분리