Notice
Recent Posts
Recent Comments
올해는 머신러닝이다.
RxKotlin Using 사용해보자 본문
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 또는 스트림에서 유용해보인다.
'스터디 > RxJava2' 카테고리의 다른 글
[RxKotlin] 두개의 리스트를 비교시 - Combinlatest 사용 (0) | 2018.01.23 |
---|---|
[RxKotlin] Lift 연산자에 대해서 알아보자 (0) | 2018.01.22 |
RxKotlin 정리 (0) | 2017.11.06 |
[RxJava2]동시성과 병렬화 테스트 (0) | 2017.10.22 |
[RxJava2]SubscriberWith는 무엇일까? (2) | 2017.10.22 |