Mono
Spring Webflux 의 Reactive Stream 를 구현하고 있는 Reactor 는 Mono 와 Flux 이다.
그 중 Mono 는 0 ~ 1 개의 데이터를 전달 하는 역할을 한다.
Mono 인스턴스 생성 방식
Just

.just()는 구독하는 순간. 특정 값을 바로 반환emit하는 함수이다.- 인스턴스화 되는 시점(
instantiation time) 에 캡쳐되는 값을 반환한다. (eager방식과 유사)
Defer

.defer()는Mono Supplier를 인자로 받아 구독하는 순간, 해당 Supplier 를 구독하여emit하는 함수이다..just()와의 차이점은 해당 값이 인스턴스화 되는 시점 은 구독하는 순간 이다.
Callable

.fromCallable()는Callable Supplier를 인자로 받아Mono Supplier인스턴스를 생성하는 함수이다.- 생성된
Mono Supplier를 구독하는 순간,Callable Supplier를 통해 단순 값 을 제공받아emit한다.
var data = 99;
private fun getData(caller: String): Int {
println("Called by $caller")
return data
}
@Test
fun monoInstantiationTest() {
println("==========================")
println(getData("HI"))
println("==========================")
val just = Mono.just(getData("JUST"))
val defer = Mono.defer { Mono.just(getData("DEFER")) }
val callable = Mono.fromCallable { getData("CALLABLE") }
just.subscribe { println("JUST data : $it") }
defer.subscribe { println("DEFER data : $it") }
callable.subscribe { println("CALLABLE data : $it") }
println("==========================")
// changed value
println("Changed value $data -> ${++data}")
println("==========================")
just.subscribe { println("JUST data : $it") }
defer.subscribe { println("DEFER data : $it") }
callable.subscribe { println("CALLABLE data : $it") }
println("==========================")
}==========================
Called by HI
99
==========================
Called by JUST
JUST data : 99
Called by DEFER
DEFER data : 99
Called by CALLABLE
CALLABLE data : 99
==========================
Changed value 99 -> 100
==========================
JUST data : 99
Called by DEFER
DEFER data : 100
Called by CALLABLE
CALLABLE data : 100
==========================