hong's android

[안드로이드] Room - AAC (Android Architecture Components) 본문

Android/Jetpack

[안드로이드] Room - AAC (Android Architecture Components)

_hong 2023. 3. 7. 13:13

Room이란?

구조화된 데이터를 로컬에 캐시하고 탐색할 수 있도록 SQLite의 추상화 계층을 제공하는 라이브러리

 

*SQLite : "SQLite는 MyAQL이나 PostgreSQL과 같은 데이터베이스 관리 시스템이지만, 

서버가 아니라 응응프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스이다.

 

구성요소

 

  • 데이터베이스 클래스 (Database): 데이터베이스를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 액세스 포인트 역할을 합니다.
  • 데이터 항목 (Entities): 앱 데이터베이스의 테이블을 나타냅니다.
  • 데이터 액세스 객체(DAO): 앱이 데이터베이스의 데이터를 쿼리, 업데이트, 삽입, 삭제하는 데 사용할 수 있는 메서드를 제공합니다.

 

Room 사용시 이점

 

  • 구조화된 데이터를 sql문을 이용해서 쿼리 할 수 있다.
  • 컴파일 타임에 쿼리를 검증하기 때문에 런타임에 충돌이 발생하는 것을 방지해 준다.
  • Db 데이터를 object로 매핑시켜주기 때문에 불 필요한 코드를 줄일 수 있다.
  • sqlite는 만약 schema가 변경되면 영향이 있는 모든 쿼리들을 변경해야 하지만Room은 Dao클래스에서 간단히 변경 가능하다.

 

 

SharedPreference vs Room 

 

두 개 모두 로컬 내부저장소를 활용해서 데이터를 저장한다. 그렇기 때문에 앱을 삭제하면 데이터는 지워진다.

SharedPreference는 key-value형태로 데이터를 저장하기 때문에 간단한 설정(자동 로그인, 테마 설정 등)을 저장할 수 있다.

Room은 아래와 같이  entitiy를 이용하거나 쿼리, 저장 할 수 있기 때문에  구조화된 데이터를 저장할 수 있다. 

Room 이용해서 데이터들을 캐싱하고 필요한 데이터들만 네트워크 요청을 할수도 있다.

 

@Dao
interface UserDao {
    @Insert
    fun insertAll(vararg users: User)

    @Delete
    fun delete(user: User)

    @Query("SELECT * FROM user")
    fun getAll(): List<User>
}

 

 

내부저장소 디렉토리

 

생성한 Database는 아래와 같이 내부 저장소에 저장된다.

 

디렉터리에는 영구 파일을 저장하는 전용 위치와 캐시 데이터를 저장하는 위치가 모두 포함되어 있습니다. 시스템은 다른 앱에서 이러한 위치에 액세스하는 것을 방지하고, Android 10(API 수준 29) 이상에서는 이러한 위치가 암호화됩니다. 이와 같은 특성으로 인해 자체에서만 액세스할 있는 민감한 정보를 저장하기에 좋습니다.