Room이란?
스마트폰 내장 DB에 데이터를 저장하기 위해 사용하는 라이브러리다.
과거에는 SQLite라는 데이터베이스 엔진을 사용했지만, 여러 문제점으로 인해 ROOM 라이브러리를 사용한다.
Room은 SQLite을 기반으로 한 데이터베이스 라이브러리입니다.
Room은 SQLite를 더 쉽게 사용하고, 안전하게 데이터베이스 액세스를 관리할 수 있도록 도와준다.
Room 구성요소
Room에는 다음 3가지 주요 구성요소가 있다.
1.데이터베이스 클래스
- 데이터베이스를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 액세스 포인트 역할을 한다.
2. 데이터 항목
- 앱 데이터베이스의 테이블을 나타낸다.
3.데이터 액세스 객체(DAO)
- 앱이 데이터베이스의 데이터를 쿼리, 업데이트, 삽입, 삭제하는 데 사용할 수 있는 메서드를 제공한다.
데이터베이스 클래스는 데이터베이스와 연결된 DAO 인스턴스를 앱에 제공한다.
그러면 앱은 DAO를 사용하여 데이터베이스의 데이터를 연결된 데이터 항목 객체의 인스턴스로 검색할 수 있게 된다.
앱은 정의된 데이터 항목을 사용하여 상응하는 테이블의 행을 업데이트하거나 삽입할 새 행을 만들 수도 있다.
각각의 항목을 좀 더 자세히 설명하자면
1. Entity
Entity는 데이터베이스 테이블의 데이터 모델을 나타낸다.
각 Entity 클래스는 데이터베이스 테이블의 열에 해당하는 필드를 포함하고, 데이터베이스 테이블의 레코드와 일치하는 객체로 사용한다.
@Entity
data class User(
@PrimaryKey val userId: Int,
val userName: String,
val userEmail: String
)
@Entity 애노테이션을 사용하여 데이터베이스 테이블의 모델 클래스를 정의한다.
각 열을 나타내는 필드와 프라이머리 키를 가진 엔터티 클래스를 만든다.
2. DAO (Data Access Object)
DAO는 데이터베이스 작업을 수행하는 메서드를 정의하는 인터페이스다.
Room에서는 DAO를 사용하여 데이터베이스의 CRUD (생성, 읽기, 업데이트, 삭제) 작업을 수행할 수 있다.
@Dao
interface UserDao {
@Insert
fun insertUser(user: User)
@Query("SELECT * FROM User WHERE userId = :id")
fun getUserById(id: Int): User
}
DAO는 데이터베이스 작업을 수행하는 메서드를 정의한다.
@Dao 애노테이션을 사용하여 인터페이스를 DAO로 표시한다.
메서드를 정의하고 SQL 쿼리를 실행하여 데이터베이스 작업을 수행한다.
3. Database
Database는 데이터베이스 연결을 나타내는 추상 클래스다.
이 클래스는 데이터베이스 버전 관리 및 데이터베이스 생성에 사용한다.
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
@Database 애노테이션을 사용하여 데이터베이스 클래스를 정의한다.
RoomDatabase 클래스를 확장하여 데이터베이스 클래스를 만든다.
데이터베이스 버전 및 엔터티와 연결된 DAO 인터페이스를 지정한다.
4. RoomDatabase
RoomDatabase는 Database 클래스를 확장하며, 앱의 데이터베이스 인스턴스를 나타낸다.
RoomDatabase를 사용하여 데이터베이스를 만들고, 데이터베이스와 연결을 유지하며, 데이터베이스 트랜잭션을 처리할 수 있다.
val db = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java,
"my-database"
).build()
val userDao = db.userDao()
데이터베이스 인스턴스를 나타낸다.
RoomDatabase 클래스를 확장하여 데이터베이스를 만들고 연결을 유지한다.
데이터베이스 연결에 대한 인스턴스를 가져오고 앱에서 사용할 수 있는 DAO 인터페이스를 제공한다.
'안드로이드' 카테고리의 다른 글
안드로이드 Context (0) | 2023.10.17 |
---|---|
안드로이드 Serializable와 Parcelable (0) | 2023.10.17 |
안드로이드 Hilt (0) | 2023.10.09 |
안드로이드 AppCompatActivity 분석 (0) | 2023.10.05 |
안드로이드 화면을 그리는 과정 (0) | 2023.10.05 |