Room 설명
Room은 기존의 안드로이드에서 제공하는 DB인 SQLite를 활용하면서 쉽고, 간결하고, 안정성 있게 사용할 수 있도록 하는 라이브러리입니다.
자세한 설명은 안드로이드 Room 참조
Room 구성요소
Room 사용법
Android Studio 4.2.2
plugins {
// Room Setting
id 'kotlin-kapt'
}
dependencies {
// Room Setting
def room_version = "2.4.1"
implementation("androidx.room:room-runtime:$roomVersion")
kapt("androidx.room:room-compiler:$roomVersion")
}
@Entity : 테이블로 사용할 data class Entity 선언
@PrimaryKey : 테이블의 각 행을 고유하게 식별하는 기본 키
@ColumnInfo : 컬럼명 지정
// TableName & ColumnName 미지정
@Entity
data class Inform(
var name: String,
var gender: String,
var phoneNumber: String
){
@PrimaryKey(autoGenerate = true)
var id = 0
}
// TableName & ColumnName 지정
@Entity(tableName = "InformTable")
data class Inform(
@ColumnInfo(name = "inform_name")
var name: String,
@ColumnInfo(name = "inform_gender")
var gender: String,
@ColumnInfo(name = "inform_number")
var phoneNumber: String
){
@PrimaryKey(autoGenerate = true)
var id = 0
}
@Dao
interface InformDao {
@Insert
fun insert(inform: Inform)
@Update
fun update(inform: Inform)
@Delete
fun delete(inform: Inform)
@Query("SELECT * FROM Inform")
fun selectAll(): List<Inform>
@Query("DELETE FROM Inform ")
fun deleteAll()
@Query("SELECT * FROM Inform WHERE name = :name")
fun selectByName(name: String)
}
@Query("SELECT * FROM Inform WHERE name = :name")
fun selectByName(name: String)
@Query("SELECT * FROM InformTable WHERE inform_name = :name")
fun selectByName(name: String)
@Database : 해당 class가 Database임을 알려주는 어노테이션
@Database(entities = [Inform::class], version = 1)
abstract class InformDatabase : RoomDatabase() {
abstract fun informDao(): InformDao
companion object {
private var instance: InformDatabase? = null
@Synchronized
fun getInstance(context: Context): InformDatabase? {
if (instance == null) {
synchronized(InformDatabase::class) {
instance = Room.databaseBuilder(
context.applicationContext,
InformDatabase::class.java,
"inform-db"
)
// MainThread 에서 사용하면 에러남
// 강제로 Main Thread 에서 사용할게 명시
.allowMainThreadQueries()
.build()
}
}
return instance
}
}
}
리소스를 많이 사용하기 때문에 싱글톤 사용을 권장함!!
위 내용들의 예제는 Github Chapter1/Room 에 올려두었습니다.
감사합니다.