본문 바로가기

Android 공부

17. 안드로이드 Room

안드로이드 room 은 Android Jetpack 에 포함된 라이브러리로 내장된 SQLite 보다 더 높은 효율을 내며 사용상에도 편리함이 존재해 사용이 권장된다. 특히 SQLite를 직접 사용하는 것과는 다르게 컴파일 타임에 오류를 확인할 수 있다는 점이 편리함으로 뽑히기도 한다.

 

 

room 은 쉽게 말해서 어플, 로컬 내에 특정 데이터를 저장할 수 있는 공간으로 실제로 나는 개발하면서 "자동 로그인 설정 여부", "이용자의 refresh token" 등 어플을 사용하면서 계속 꺼내 써야하는 정보를 저장하는데 사용했다. 

 


 

room 은 세가지 핵심 구성 요소로 이루어져 있다.. 

 

먼저 데이터베이스 클래스는 기본 액세스 포인트 역할을 한다. 데이터 베이스를 보유할 클래스를 정의하는 것으로, 연결된 데이터 항목을 나열하는 배열이 포함되어야 한다. 

 

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

 

위의 예시 코드처럼 @Database 주석이 달려 있어야 하며, RoomDatabase( ) 를 확장하는 추상 클래스여야 한다. 

 

 

두번째로 데이터 항목이 있다. 데이터 항목은 어플 db의 테이블을 나타낸다. 데이터 항목을 정의하는 부분으로 db에 어떤 요소가 있는지, 요소들의 타입이 무엇인지 등을 확인할 수 있다. 

 

@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)

 

 

마지막으로 데이터 액세스 객체 DAO 가 있다. 앱이 데이터베이스의 데이터를 쿼리, 업데이트, 삽입, 삭제하는데 사용할 수 있는 메서드를 제공한다. 

 

@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)

 

 

다음과 같이 구성요소를 모두 구현하고 난후에 실제로 사용하는 경우에는 아래와 같이 인스턴스를 만들어 room db 를 사용할 수 있다. 

 

val db = Room.databaseBuilder(
            applicationContext,
            AppDatabase::class.java, "database-name"
        ).build()

 


나는 처음부터 room 을 사용해서 SQLite 와의 차이를 정확하게 체감해보지 못했지만 내부에 데이터를 쿼리하고 저장하는 등의 작업에 room 이 아주 많은 도움이 된다.개발하고 있는 프로젝트에서 room db 마이그레이션이 필요한 부분이 있는데 마이그레이션은 고려해야할 사항들이 많다고 여겨져서 조금 더 공부하고 해볼 예정이다. 정리가 된다면 게시글로 작성해보겠다.

'Android 공부' 카테고리의 다른 글

19. 안드로이드 Manifest  (0) 2023.02.01
18. 안드로이드 Intent  (0) 2023.01.31
16. 안드로이드 Retrofit  (0) 2023.01.27
15. REST API 에 대하여  (0) 2023.01.26
14. HTTP 에 대하여  (0) 2023.01.21