본문 바로가기

Rx

RxKotlin- Part 2. Observable 생성 (fromArray(), fromIterable())

728x90

배열, 리스트 등의 자료구조와 Callable, Publisher, Future 등은 From...() 함수를 통해 Observale을 생성할 수 있다.

fromArray()

배열을 Observable 변환하기 위해 사용하며, 아이템을 순차적으로 발행한다.

fun main(){
    var items = arrayOf(100, 200, 300)

    items.toObservable().subscribe(
        { println("${it}") },
        { println("onError") }, // onError: Consumer
        { println("onComplete") }, // onComplete: Consumer
        { println("onSubscribe") } // onSubscribe: Consumer
    )

    Observable.fromArray(*items).subscribe(
        { println("${it}") },
        { println("onError") }, // onError: Consumer
        { println("onComplete") }, // onComplete: Consumer
        { println("onSubscribe") } // onSubscribe: Consumer
    )
}

실행결과:

onSubscribe
100
200
300
onComplete

onSubscribe
100
200
300
onComplete

위 코드를 보면 예제가 서로 다르다. toObservable을 이용하는 방법과 '*'를 이용해 주소 값의 데이터를 읽어오는 방법이 있다.​

fromIterable()

ArrayList, HashSet, LinkedList, Stack, Vector 등의 자료 구조 클래스를 Observable로 변환하기 위해서 사용하는 함수다. Iterable 인터페이스는 반복자를 반환하며 iterator 패턴을 구현한 것이다. Iterator 인터페이스는 어떤 데이터가 있는지와 해당 값을 얻오는 것만 수행합니다.

fun main(){
    val items = HashSet<Any>()    // 가변성
    items.add(6)
    items.add(false)
    items.add("b")

    items.toObservable().subscribe(
        { println("${it}") },
        { println("onError") }, // onError: Consumer
        { println("onComplete") }, // onComplete: Consumer
        { println("onSubscribe") } // onSubscribe: Consumer
    )

    val item = ArrayList<People>()
    item.add(People("gon"))
    item.add(People("min"))
    item.add(People("jun"))

    Observable.fromIterable(item).subscribe(
        { println(it.getterName()) },
        { println("onError") }, // onError: Consumer
        { println("onComplete") }, // onComplete: Consumer
        { println("onSubscribe") } // onSubscribe: Consumer
    )
}
class People(name : String) {
    lateinit var name : String
    init {
        this.name = name
    }
    fun getterName(): String {
        return this.name
    }
}

실행결과:

onSubscribe
b
false
6
onComplete

onSubscribe
gon
min
jun
onComplete

위의 코드를 보면 ArrayList와 HashSet을 사용한 것을 볼 수 있다. 지금까진 직접 값을 할당하여 예제를 해왔었지만 People 객체에 데이터를 전달하고, getter 함수를 호출하는 예제도 작성해보았다.