Flow (19장 정의)

image.png

image.png


Flow 이해하기

간단한 람다식부터 시작

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 함수형 인터페이스로 분리