본문 바로가기
개발/안드로이드

RxJava와 Room DB

by darksilber 2019. 5. 31.
반응형

출처: https://deque.tistory.com/126?category=984011 [코딩하는 사람]

 

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

 

 

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

 

와 같이 작성한다.

 

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

 

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

 

 

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

 

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

 

예를들면,

 

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

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

 

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

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

와 같이 수행하면 되겠다.

 

 

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

 

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



반응형

댓글