다음을 build.gradle.kts(Module : app)에 추가한다.
//Room 버전 val room_version:String = "2.6.1" // Room implementation("androidx.room:room-runtime:$room_version") implementation("androidx.room:room-ktx:$room_version") // Kotlin annotation processingtool kapt ("androidx.room:room-compiler:$room_version")
플러그인에도 다음을 추가해야 한다.
plugins { ... id("kotlin-kapt") }
참고로 2024. 7. 29. 현재 구글검색을 하면 나오는 gradle script 예제들은 Groovy 언어에 기반한 것이다1). 그런데 우리는 코틀린 스크립립트 즉, kts파일을 이용할 것이므로 코틀린 언어를 사용해야 한다. 따라서 위와 같이 써야 플러그인을 정상적으로 다운 받을 수 있다.
데이터 클래스를 생성하여 구조화된 자료를 만들자.
이를테면 다음과 같이 만들 수 있을 것이다.
data class Todo( var id : Int = 0, var title : String, var createdAt : LocalDateTime ) [[android:클래스와리스트를사용하기|데이터 클래스 예시]]를 참조하자
위 데이터 클래스에 애노테이션을 추가하면 엔티티를 만들 수 있다.
데이터 클래스 위에 “@Entity” 애노테이션을 추가하면 데이터베이스에서 다루틑 엔티티가 된다.
그 외에 데이터베이스에서 다루는 개념들도 애노테이션으로 추가 가능하다. 이를테면 프라이머리키는 “@PrimaryKey”로 추가하면 된다.
다음은 그 예시다.
Contact.kt를 다음과 같이 만들었다.
package com.dklaw.gogo2.database import androidx.room.Entity import androidx.room.PrimaryKey @Entity data class Contact( val firstName : String, val lastName : String, val phoneNumber : String, val phoneNumber2 : String, val officeNumber : String, val faxNumber : String, val email : String, val address : String, val idCardAddress : String, val zipcode : String, val socialNumber : String, val work : String, val workAddress : String, val etc : String, val photo : String, @PrimaryKey(autoGenerate = true) val id : Int = 0 )
다음과 같이 ContactDAO.kt 파일을 만든다.
package com.dklaw.gogo2.database import androidx.room.Dao import androidx.room.Delete import androidx.room.Query import androidx.room.Upsert import kotlinx.coroutines.flow.Flow @Dao interface ContactDAO { @Upsert suspend fun upsertContact(contact : Contact) @Delete suspend fun deleteContact(contact: Contact) @Query("SELECT * FROM contact ORDER BY firstName ASC") fun getContactsOrderByFirstName() : Flow<List<Contact>> @Query("SELECT * FROM contact ORDER BY lastName ASC") fun getContactsOrderByLastName() : Flow<List<Contact>> @Query("SELECT * FROM contact ORDER BY phoneNumber ASC") fun getContactsOrderByPhoneNumber() : Flow<List<Contact>> }