[Android] Room을 사용한 간단한 Todo Example (kotlin)

hyooosong·2021년 1월 28일
0
post-thumbnail

Room 이란?

  • 안드로이드 Jetpack이 제공하는 데이터베이스 아키텍처
  • Object Relational Mappin, ORM 라이브러리
    데이터베이스의 객체를 자바 or 코틀린 객체로 매핑해줍니다.

Room의 세 가지 주요 구성요소

  • Entity
    데이터베이스에서의 테이블 역할

  • Dao
    데이터베이스에 접근하는 데 필요한 메서드 포함
    ex. Query, Insert, Update, Delete ...

  • Database
    RoomDatabase 클래스를 상속받는 abstract class

📆 Todo File 예제 (kotlin)

  1. build-gradle 설정
  2. .xml 파일 작성 (View)
  3. Todo.kt 작성 (data class), @Entity @PrimaryKey
    -> Room에서 사용하기 위한 객체 파일
  4. TodoDao.kt 작성, @Dao
    -> Todo에 대해 어떤 동작할 지 정의하는 인터페이스 파일
  5. AppDatabase.kt 작성, @Database (entities=[], version=1)
    -> RoomDatabase 상속, 추상 메서드 작성
  6. Activity 작성
    -> AppDatabase 변수 선언 (객체 생성)

build.gradle (app)

dependencies {
  def room_version = "2.2.6"

  implementation "androidx.room:room-runtime:$room_version"
  kapt "androidx.room:room-compiler:$room_version"

  // optional - Kotlin Extensions and Coroutines support for Room
  implementation "androidx.room:room-ktx:$room_version"

  // optional - Test helpers
  testImplementation "androidx.room:room-testing:$room_version"
}

activity_main.xml

Todo.kt

@Entity
data class Todo(var todoList: String) {
    @PrimaryKey(autoGenerate = true)
    var id: Int = 0
}

❓ autoGenerate = true : 자동으로 PK값 1씩 증가

TodoDAO.kt

@Dao
interface TodoDAO {
    @Query("SELECT * FROM Todo")
    fun getAll(): List<Todo>

    @Query("SELECT todoList FROM Todo")
    fun getTodoList(): MutableList<String>

    @Insert
    fun insert(todo: Todo)
    ...
}

AppDatabase.kt

@Database(entities = [Todo::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun toDoDao(): TodoDAO
}

MainActivity.kt

db = Room.databaseBuilder(baseContext, AppDatabase::class.java, "TodoDB")
            .allowMainThreadQueries()
            .build()
 // insert Todo
db.toDoDao().insert(Todo(editTextTodo.get().toString()))
 // show TodoList
binding.textViewTodoList.text = db.toDoDao().getTodoList().toString()

0개의 댓글

관련 채용 정보