목차
0. 개요
최근 프로젝트를 진행하며 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스레드를 뜻한다.
'Develop > Android' 카테고리의 다른 글
Android 함수를 매개변수로 전달 - kotlin (0) | 2020.05.16 |
---|---|
kotlin custom listener 이용하기 (0) | 2020.05.06 |
MPAndroidChart 라이브러리를 활용한 BarChart 그리기 (19) | 2020.04.26 |
코틀린 코루틴이란? (Kotlin coroutine) (0) | 2020.04.14 |
android Room 사용하기 (0) | 2020.04.06 |