본문 바로가기
Develop/Android

Android Room에 코루틴과 LiveData 적용해보기

by 라이프레이서 2020. 4. 28.

목차

    반응형

    0. 개요

    최근 프로젝트를 진행하며 Android Room을 이용해보기 위해 공부한 내용을 포스팅 하려 한다.

    Android Room과 관련한 포스팅은 아래 링크를 참고하면 좋을 것 같다.

    android Room 사용하기

     

    android Room 사용하기

    0.Intro android Room 을 사용하는 방법에 대해 알아보자 android Room은 SQLite, Realm과 같은 로컬 데이터베이스로서 원활한 데이터베이스 접근을 가능케 하는 라이브러리이다. 현재 안드로이드 개발자 페

    chjune0205.tistory.com

     

    Android Room에 대해 공부해보다가 MVVM패턴, 코루틴, dataBinding 등 많은 지식들을 학습하게 되었는데 차근차근 이에 대해 서술해보겠다.

    먼저 MVVM패턴에 대해 알아보자

    1. MVVM 패턴

    내용은 사진과 같다. 직접 필기를 하며 MVVM패턴에 대해 공부해보았는데 이렇게만 알아서는 어떻게 설계를 해야할 지 막막했다.
    직접 해보자.

    2.gradle 셋팅

    gradle설정에

        //room에 코루틴 사용을 위함
        implementation "androidx.room:room-ktx:2.2.5"
    
        //LifecycleScope 코루틴 사용을 위함
        implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.0-alpha01'
    
        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"

    이렇게 추가해주고 Sync Now를 해주었다.

    3. LiveData

    Dao 인터페이스

    Dao 인터페이스에서 LiveData로 감싸주면 해당 부분을 관찰 가능하다.

        @Query("SELECT * FROM MyHabitData")
        fun getAll() : LiveData<List<MyHabitData>>

    이를 직접 사용할때는 observe를 통해 관찰을 등록해주면 된다.

    사용을 위해 AppDatabase 객체를 사용한다.

    val db = Room.databaseBuilder(context,AppDatabase::class.java, "habit_db").build()
    
    db.habitDao().getAll().observe(viewLifecycleOwner, Observer{
        //it을 이용해 불러온 데이터들 이용 가능하다.
    })

    4. 코루틴 이용하기

    코루과 관련한 포스팅은 아래 링크를 참고하면 대략적으로 느낌을 잡을 수 있다

    https://chjune0205.tistory.com/80

     

    코틀린 코루틴 개념 알아보기(Kotlin coroutine)

    0. 코루틴이란? 코루틴 (coroutine) : 루틴의 일종으로서, 협동(co)루틴 이라고 할 수 있다. 두 루틴 이상이 서로 대등한 관계에 있으며, 서로가 서로를 호출하는 방식으로 작동한다. 어떠한 코루틴이 발동될 때..

    chjune0205.tistory.com

    필요성
    Android Room에 대해 다루면서 Insert나 Update 등 local database를 이용할 때 데이터를 조작할때는 Main 스레드가 아닌 백그라운드 스레드에서 작업해주어야 한다.
    스레드 또는 AsyncTask를 사용할 수 있겠으나, Kotlin을 이용하여 백그라운드 작업을 할 때는 코루틴을 사용하도록 한다.

    코루틴과 관련해서는 간단하게 이렇게 사용하는구나만 알고 넘어간다.

    먼저 Dao 인터페이스의 insert 함수이다

    @Insert
    suspend fun insert(data : HabitData)

    여기서 suspend 속성을 주어 반드시 코루틴 스코프 내에서 호출 되도록 강제해준다.
    (그렇지 않으면 main스레드에서 호출 가능하게 되어 런타임 오류가 발생할 수 있다.)

    lifecycleScope.launch(Dispatchers.IO){
        //insert 함수 이용하는 부분
    }

    참고롤 Dispatchers.IO는 백그라운드, Dispatchers.Main은 UI스레드를 뜻한다.

    반응형