반응형
앱을 개발하다 보면 콜백함수를 활용해서 구현할 일이 많다. 예를들어 사용자가 설정화면에서 로그인을 하는 과정을 생각해보자. 처음에는 프로필사진도 비어있을테고 유저 이름도 '게스트'로 되어있을 것이다. 로그인을 완료했으면 이러한 UI들을 사용자 정보에 맞게 변경해주어야 한다. Activity간에 Intent도 넘기며 다양하게 구현할수 있지만 클래스간 의존성이 강하게 생긴다. 어느 클래스간 원할때 콜백을 쉽게 하는 방법을 알아보자.
구현
app.gradle 내에 다음과 같이 rxjava 라이브러리를 추가해준다.
dependencies {
// reactiveX Programming
implementation 'io.reactivex.rxjava2:rxjava:2.2.13'
}
이후에 다음과 같이 객체를 생성해준다.
object RxBus {
private val publisher = PublishSubject.create<Any>()
fun publish(event: Any) {
publisher.onNext(event)
}
fun <T> listen(eventType: Class<T>): Observable<T> = publisher.ofType(eventType)
}
이 다음 이벤트 이름을 관리하는 클래스도 하나 만들어준다.
class RxEvents {
// 예시 1) 로그인이 끝났을때 호출하는 콜백
class EventFinishLogin(val userName: String)
// 예시 2) 스토어로 이동할때 호출하는 콜백
class EventGoToStore()
}
사용법
콜백 보내는 쪽. 한줄이면 끝난다.
fun doLogin() {
// 로그인 처리 관련 코드
// do something..
// 로그인 모두 끝났을때 호출
RxBus.publish(RxEvents.EventFinishLogin("HongGilDong"))
}
콜백 받는쪽. Rxjava는 disposable을 통해 객체(observable)를 관리 한다.
private val compositeDisposable = CompositeDisposable()
override fun onCreate() {
compositeDisposable.add(
RxBus.listen(RxEvents.EventFinishLogin::class.java).subscribe {
refreshProfileUI(it.userName) // 콜백이 호출 되면 이 함수가 호출됨
}
)
}
override fun onDestroy() {
compositeDisposable.clear()
}
이렇게 쉽게 어디서나 콜백을 호출하고 받을수 있다. 단, 반드시 lifecycle과 동기화를 해주어야함에 주의하자.
반응형
'Android' 카테고리의 다른 글
[Android] Firebase Remote Config 사용하기 (0) | 2021.12.06 |
---|---|
Activity / Fragment ViewBinding Boilerplate Class (0) | 2021.12.05 |
Google Admob 보상형 광고 적용 및 최적화 하기 (0) | 2020.05.04 |
Google Admob 광고 사용하기 (0) | 2020.05.04 |