Room
Room은 안드로이드 내부 데이터베이스 라이브러리 중 하나 SQLite를 대체할 라이브러리이다. 이번 문서에서는 코틀린을 이용하여 Room을 활용하는 간단한 예제를 살펴본다.
기본 구성
Room을 사용하기 위해선 몇 가지 그래들 세팅이 필요하다. 먼저, build.gradle(:app)에서 다음과 같이 설정한다.
...
apply plugin: 'kotlin-kapt'
...
dependencies {
...
implementation 'androidx.room:room-runtime:2.1.0'
kapt 'androidx.room:room-compiler:2.1.0' //kapt 대신 annotationProcessor를 사용하면 안된다.
}
위 사진은 Room 아키텍쳐 구조이다. 기본적인 앱과 Room 데이터베이스가 존재하는 상황이다. 그리고 빨간색 박스의 Entities는 데이터 객체를 표현하는 클래스, 초록색 박스는 Room의 데이터를 접근하기 위한 클래스이다.
Entity - Todo.kt
@Entity
data class Todo(var title: String) {
@PrimaryKey(autoGenerate = true) var id: Int = 0
}
위에서 data class의 선언은 코틀린 기본 문법으로 getter, setter 등의 구현이 필요 없어지고, 기본키의 autoGenerate는 ID 값을 자동으로 설정해준다.
DataAccessObject - TodoDao.kt
@Dao
interface TodoDao {
@Query("SELECT * FROM Todo")
fun getAll(): List<Todo>
@Insert
fun insert(todo: Todo)
@Update
fun update(todo: Todo)
@Delete
fun delete(todo: Todo)
}
위의 정의된 함수들을 통해 손쉽게 데이터 접근이 가능하다. 필요하다면 자신이 원하는 쿼리문을 추가할 수도 있다.
AppDatabase - AppDatabase.kt
@Database(entities = [Todo::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun todoDao(): TodoDao
}
위 AppDatabase를 통해 생성한 데이터베이스 객체를 가져올 수 있다.
MainActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val db = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java, "database-name"
).allowMainThreadQueries().build()
result_textView.text = db.todoDao().getAll().toString()
add_button.setOnClickListener {
db.todoDao().insert(Todo(todo_edit.text.toString()))
result_textView.text = db.todoDao().getAll().toString()
}
}
}
에디트 텍스트로 값을 입력 받고 버튼을 클릭시 DB에 추가하고 화면에 표시된다.
'안드로이드 > JetPack' 카테고리의 다른 글
[안드로이드] 6. DataBinding (0) | 2020.08.10 |
---|---|
[안드로이드] 5. ViewModel을 이용하여 UI와 로직을 분리 (0) | 2020.08.10 |
[안드로이드] 4. Room 비동기처리 (feat. Coroutine) (0) | 2020.08.09 |
[안드로이드] 3. LiveData (0) | 2020.08.09 |
[안드로이드] 1. MVVM 개요 (0) | 2020.08.09 |