본문 바로가기

코딩/안드로이드

RxJava와 Room DB

자기 전, 갑자기 생각나서 정리를 해야할 것 같아서 쓰는 

 

 

ROOM DB와 RxJava의 조합

 

 

에 관한 글.

 

 

 

Room DB는 Andriod Jetpack에 포함된 SQLite를 대체하는 데이터베이스이다.

 

특징으로는, 간단한 insert, update, delete 등등의 기본적인 함수를 SQL문을 이용하여 적지 않아도 된다는게 큰 특징이다.

 

사용해보면 알겠지만 SQLite와 DBHelper를 쓰는 등의 기존 방식보다 훨씬 편리하고 마음이 놓인다는 장점이 있다.

 

마음이 놓인다는 이유는.. 제가 DB지식이 적어서 SQL문이 오류날까봐 항상 전전긍긍하는데 SQL문을 덜 적어도 되기 때문.. 이다... ㅋㅋㅋ

 

 

또한 특징이 하나 더 있는데, RxJava를 연동해서 쓸 수 있다는 점이다.

 

예를들어, DB에서 getUser 함수를 이용하여 user 하나를 얻어온다고 치자.

 

그럼 그러한 getUser함수를 

 

fun getUserById( id: String ) : Single<User>

 

와 같이 작성한다.

 

그렇게 되면, 우리는 DB에서 User를 하나 얻어오는 행동을 리액티브하게 할 수 있게 된다.

 

Single 뿐만 아니라 Maybe도 사용 가능하다.

 

 

이러한 방식으로 DAO에서 Single 객체를 넘겨주면

 

AppDatabase에서는 해당 Single 객체를 약간의 가공을 수행해서 외부로 노출시켜 주면 된다.

 

예를들면,

 

fun getUserNameById() : Single<String> {
	return userDao().getUserById()
    		 .map { user -> user.Name };
}

이런식으로 Single객체를 map으로 가공하여 던져주면 된다.

 

그 후 DB를 조회하고 싶은 곳에서는

AppDatabase.INSTANCE.getUserNameById().subscribeOn(...)observeOn(.....).subscribe{ User를 얻어와서 할 일 }

와 같이 수행하면 되겠다.

 

 

확실히 코틀린이 간결하다..

 

그리고 Rx는 정말 방대하다....

 

 

 

 

'코딩 > 안드로이드' 카테고리의 다른 글

Android DiffUtil  (0) 2019.09.12
Gradle : implementation VS compileOnly  (0) 2019.08.03
Android Action Mode  (0) 2019.05.13
Android View Stub  (0) 2019.05.13
안드로이드 Picture In Picture (PIP)  (0) 2019.04.22