자기 전, 갑자기 생각나서 정리를 해야할 것 같아서 쓰는
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 |