목차
0.Intro
android Room 을 사용하는 방법에 대해 알아보자
android Room은 SQLite, Realm과 같은 로컬 데이터베이스로서 원활한 데이터베이스 접근을 가능케 하는 라이브러리이다.
현재 안드로이드 개발자 페이지에서 SQLite에 대해 검색하면 다음과 같은 내용을 볼 수 있다.
이후 android Room 지속성 라이브러리를 사용하기 위한 페이지로 이동하면 아래와 같은 내용을 확인 할 수 있다.
android Room에서
Entities 는 데이터베이스 내의 테이블을 나타낸다.
DAO (Data Access Objects)는 말 그대로 데이터베이스에 접근하는데 사용되는 메소드들이 들어 있다.
android Room에 대한 기본 개념을 알았으니 실제로 구현해보는 시간을 가져보자
1. gradle 설정 해주기
android Room을 사용하기 위해서 먼저 gradle 설정을 해주자
module 수준의 gradle파일에 다음과 같은 플러그인을 추가한다
apply plugin: 'kotlin-kapt'
이후 dependencies에 android Room에 대한 라이브러리를 추가한다.
implementation "android.arch.persistence.room:runtime:1.1.1"
kapt "android.arch.persistence.room:compiler:1.1.1"
kaptTest "android.arch.persistence.room:testing:1.1.1"
다 했으면 sync now 클릭해서 적용시켜주자
2. activity_main.xml
activity_main.xml은 위와 같이 editText, button, textview(아래 빈 공백부분) 세가지로 구성해서 진행하였다.
3. Entities 만들기
필자는 Todo라는 이름의 data class를 생성하여 Entitiy를 생성해주었다.
이 때 @Entity 어노테이션을 붙여주어야 한다.
또한 @PrimaryKey(autoGenerate = true)로 설정하여 id값을 설정해주었다.
@Entity
data class Todo(
val title : String
){
@PrimaryKey(autoGenerate = true) var id : Int = 0
}
4. Dao 만들기
@Dao 어노테이션을 이용하여 만들어준다.
@Query, @insert 등등의 어노테이션을 붙여 각 메소드들을 만들어주면 편리하게 CRUD 기능이 구현 가능하다.
@Dao
interface TodoDao {
@Query("SELECT * FROM Todo")
fun getAll() : LiveData<List<Todo>> // 추후에 설명
@Insert
fun insert(todo: Todo)
@Update
fun update(todo: Todo)
@Delete
fun delete(todo: Todo)
}
5. Database 만들기
Database는 @Database 어노테이션을 사용하며 첫번째 인자로 어떤 Entities를 가지는지 해당 항목의 목록을 선언해주어야 한다.
두 번째 인자로는 버전코드에 대해 선언해 주어야 한다.
추상 클래스로 만들어줌과 동시에 @Dao로 처리된 클래스를 반환해야 한다는 규칙을 가지고 있다.
@Database(entities = arrayOf(Todo::class), version = 1)
abstract class AppDatabase : RoomDatabase(){
abstract fun todoDao() : TodoDao
}
6. 사용하기
이제 android Room에 대한 사용 준비가 되었다. MainActivity에서 사용해보자
해당 객체를 초기화 하는 부분에서 테스트를 위해 allowMainThreadQueries를 사용했다.
데이터베이스에 접근하는 경우 MainThread에서 처리하면 비정상 종료를 야기하나 테스트를 위해 사용
val db = Room.databaseBuilder(this, AppDatabase::class.java, "todo_db")
.allowMainThreadQueries()
.build()
db.todoDao().getAll().observe(this, androidx.lifecycle.Observer {
tv_result.text = it.toString()
})
btn_add.setOnClickListener{
db.todoDao().insert(Todo(title = et_todo.text.toString()))
}
7. 결과
텍스트를 입력하고 추가 버튼을 누르면 다음과 같이 결과들이 갱신 됨을 알 수 있다.
이번 시간에는 android Room에 대한 구현을 간단하게 해보았다.
'Develop > Android' 카테고리의 다른 글
MPAndroidChart 라이브러리를 활용한 BarChart 그리기 (19) | 2020.04.26 |
---|---|
코틀린 코루틴이란? (Kotlin coroutine) (0) | 2020.04.14 |
세로 방향 뷰페이저 적용하기 - Vertical ViewPager (Kotlin) (0) | 2019.12.22 |
TabLayout과 ViewPager 연동하기 (0) | 2019.12.21 |
안드로이드 스튜디오 XML 파일들 에러 발생 시 (0) | 2019.12.19 |