Room
- SQLite를 쉽게 사용할 수 있는 데이터베이스 객체 매핑 라이브러리
- 쉽게 Query를 사용할 수 있는 API를 제공
- Query를 컴파일 시간에 검증함
- Query결과를 LiveData로하여 데이터베이스가 변경될 때 마다 쉽게 UI를 변경할 수 있음
- SQLite 보다 Room을 사용할 것을 권장함
장점
- SQL 쿼리의 컴파일 시간 확인
- 반복적이고 오류가 발생하기 쉬운 상용구 코드를 최소화하는 편의 주석
- 간소화된 데이터베이스 이전 경로
설정방법
plugins {
id 'kotlin-kapt'
}
dependencies {
def room_version = "2.5.1"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
kapt "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-ktx:$room_version"
testImplementation "androidx.room:room-testing:$room_version"
}
Entity 정의
- 데이터 베이스의 테이블 행 역할을 한다.
- 반드시 PrimaryKey가 있어야 한다. (자동 생성은 autoGenerate = true 속성 추가)
- 기본적으로 클래스 이름이 테이블명이지만 따로 지정은 @Entity(tableName = " ")을 사용한다.
e.g. CREATE TABLE student_table (student_id INTEGER PRIMARY KEY, name TEXT NOT NULL);
@Entity(tableName = "student_table")
data class Student (
@PrimaryKey
@ColumnInfo(name = "student_id")
val id: Int,
val name: String
)
DAO 정의
- 인터페이스나 추상 클래스로 정의 가능.
- 일반적으로 인터페이스로 구현. @Dao 어노테이션 필수이다.
- 앱 데이터베이스의 데이터와 상호작용하는 메소드를 하나 이상 정의한다.
- 가능한 annotation으로 @Insert, @Update, @Delete, @Query가 있다.