반응형
🔶 Room 이란?
Android App에서 SQLite 데이터베이스를 쉽고 편리하고 쉽게 사용할 수 있게 해주는 라이브러리입니다. 보통 스마트폰 내장 DB에 데이터를 저장하고 싶을 때 많이 사용합니다.
DAO
, Entity
, RoomDatabase로
구성되어 있다. 구조는 아래와 같습니다.
Dependency는 아래의 페이지로 들어가 확인할 수 있습니다.
https://developer.android.com/jetpack/androidx/releases/room
🔶 Entity
Entity는 테이블로 만들고 싶은 객체에 annotation으로 Entity를 선언하고 테이블 네임을 설정해줍니다.
@PrimaryKey
를 사용하여 primary key를 만들 수 있고 autoGenerate
를 통해 자동으로 값을 생성해 줄 수 있습니다. @ColumnInfo(name = "칼럼 이름")을
사용하여 변수 이름과 다르게 table 변수를 지정할 수 있습니다.
@Entity(tableName = "userInfo")
data class User(
@PrimaryKey(autoGenerate = true)
var id: String,
@ColumnInfo(name = "name")
var name: String,
@ColumnInfo(name = "birth")
var birth: String,
)
🔶 Dao
데이터에 접근할 수 있는 메써드를 정의해 놓는 인터페이스입니다. 각각의 annotation을 붙여서 그 기능을 정의할 수 있는데
- @Insert : 테이블에 데이터 삽입
- @Update : 테이블에 데이터 수정
- @Delete : 테이블에 데이터 삭제
- @Query : 그 외에 특정 쿼리문을 실행해 결과를 얻고 싶을 때 사용
(onConflict = OnConflictStrategy.REPLACE)
은 Insert할 시 PrimaryKey 값이 이미 존재하면 데이터를 갱신한다는 의미입니다.
@Dao
interface UserDao {
@Query("SELECT * FROM User") // 테이블의 모든 값을 가져옴
fun getAll(): List<User>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(user: User)
@Update
fun update(user: User)
@Delete
fun delete(user: User)
}
🔶 Room Database
Room Database는 데이터베이스를 생성하고 관리하는 데이터베이스 객체 만들기 위해서 만드는 추상 클래스입니다.
version은 앱을 업데이트하다가 기존 Entity 구조를 변경해야 하는 일이 발생할 때 구분해주는 역할을 해줍니다.
@Database(entities = [User::class], version = 1)
abstract class UserDatabase: RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
private var INSTANCE: StockTradeItemDatabase? = null
@Synchronized
fun getInstance(context: Context): RoomDatabase? {
if (INSTANCE == null) {
INSTANCE=Room.databaseBuilder(context.applicationContext,
UserDatabase::class.java, "user_database")
.fallbackToDestructiveMigration()
.allowMainThreadQueries()
.build()
}
return INSTANCE
}
}
}
만약 하나의 데이터베이스에 여러 개 Entity를 추가해야 한다면 arrayof()를 통해 넣어주면 됩니다.
@Database(entities = arrayOf(User::class, Student::class), version = 1)
abstract class UserDatabase: RoomDatabase() {
abstract fun userDao(): UserDao
}
반응형
'개발 > Android' 카테고리의 다른 글
[Android] (번역) Comparing Kotlin Coroutines with Callbacks and RxJava (0) | 2021.08.20 |
---|---|
[Android] 스마트폰 내장 DB를 사용하기 위한 Room 2탄 (0) | 2021.08.13 |
[Android] View Binding(뷰 바인딩) (0) | 2021.08.05 |
[Android] 디자인 패턴 (MVC, MVP, MVVM) (0) | 2021.08.03 |
[Android] FCM Data 와 Notification (0) | 2021.07.23 |
댓글