본문 바로가기
Android/Android Development

Android Room - Coroutines(코루틴)과 같이 쓰는 법

by 2Plus 2020. 6. 6.

Photo by DeMorris Byrd on Unsplash

 이번 포스팅에서는 지난 번에 설명한 Room과 Coroutine을 함께 사용하는 방법에 대해 알아 본다. Room은 2.1 버전부터 Coroutine을 지원해주고 있다. DAO 메소드를 suspend로 선언하여 사용할 수 있다.

 

 

build.gradle 파일 수정

 Room만 사용한다고 Coroutine 지원을 바로 받을 수 있는 것은 아니다. Room과 Coroutine을 함께 사용하려면 build.gradle 파일에서 Room 버전을 2.1 이상으로 지정하고 Coroutine 지원 dependency도 추가해주어야 한다.

 

 

 

 

 위와 같은 방식으로 build.gradle에 coroutine을 위한 room dependency를 추가해주면 된다.

 

 

suspend DAO method 선언

 

 DAO 선언시 suspend로 사용할 함수들 앞에 suspend 키워드만 붙여주면 빌드시 Room이 알아서 suspend 함수로 구현해준다. build.gradle 파일에 한 줄만 추가했을 뿐인데, suspend function으로 편하게 사용할 수 있게 되었다.

 

 

 

 "@Transcation" annotation도 suspend로 선언될 수 있으며, Coroutine의 suspend이기 때문에 다른 suspend 함수를 호출할 수 있다. 위와 같이 사용하는 것도 가능하다.

 

 

 

  transaction scope 내에서 다른 DAO의 suspend 함수 역시 호출이 가능하다.

 executor를 구현하고 제공하면 실행될 쓰레드를 제어하는 것도 가능하다. 기본적으로는 백그라운드 쓰레드에서 DB 쿼리를 하는 것과 동일한 executor가 사용된다.

 

 

마치며..

 Room과 Coroutine을 함께 사용하게 되면 DB 작업들은 UI 쓰레드가 아닌 디스패처에서 실행하게 된다. Room이어서가 아닌, Coroutine이어서 그렇다. suspend 함수는 다른 suspend 함수나 코루틴에서만 실행될 수 있다. Room 사용법과 함께 Coroutine에 대한 이해도 충분히 한 후에 사용하는 것을 권장한다.

 

 

반응형

댓글