스터디/RxJava2
RxKotlin Using 사용해보자
행복한 수지아빠
2018. 1. 19. 00:31
반응형
Using
코틀린에서 기본적으로 Use을 제공한다.
myStream.use { // 자동으로 열고 닫는다. val line = readLine()}
하지만 Rx에도 자원관리를 할 수 있는 방법이 있다. 바로 Using 이다.
공식문서는
http://reactivex.io/documentation/operators/using.html
그럼 우선 RxKotlin 에서 어떻게 보이는 지 살펴보자.
fun <T, D> using(resourceSupplier: Callable<out D>, //첫번째 인자 (열고)sourceSupplier: Function<in D, //두번째 인자 (값 만들고)out ObservableSource<out T>>, //세번째 인자 (닫기) disposer: Consumer<in D>): Observable<T> { return using(resourceSupplier, sourceSupplier, disposer, true) }
분해해보면 단순하다. 열어서 처리하고 닫으면 된다.
그럼 한번 사용을 해보자.
우선 닫을수 있는 Resource 클래스를 정의하자
class Resource : Closeable { init { println("Resource Created") }
fun open() : Resource{ println("Resource Opened") return this } val data : String = "Hello World"
override fun close() { println("Resource closed") }}
이 걸 테스트 해보자.
@Testfun testResource() { Observable.using( { Resource().open() //열고 } , { resource : Resource -> Observable.just(resource) //실행 }, { resource: Resource -> resource.close() //닫고 } ).subscribe{ println("Resource Result -> ${it.data}") }}===========Resource CreatedResource OpenedResource Result -> Hello WorldResource closed
잘 실행되는 걸 볼 수 있다. 의외로 간단한 사용에 놀랍다.
리소스 관리가 필요한 DB 또는 스트림에서 유용해보인다.
반응형