Android

[안드로이드] Room Local DB

베르_최성훈 2023. 5. 22. 16:08
  1. 로컬 DB 를 사용
    • 상당한 양의 데이터를 처리하는 앱은 데이터를 로컬에 저장하여 매우 큰 이익을 얻을 수 있습니다.
    • 예시로 네트워크에 액세스할 수 없을 때도 사용자가 오프라인 상태로 콘텐츠를 탐색할 수 있도록 캐시
  2. Room DB란Room 의 장점
    • SQL 쿼리의 컴파일 시간 확인
    • 반복적이고 오류가 발생하기 쉬운 boilerplate 코드를 최소화할 수 있는 편리한 어노테이션 제공
    • 간소화된 DB 이전 경로
    SQLite API를 직접 사용하지 않고 Room 을 사용할 것을 Docs 에서 공식적으로 권장하고 있음

  3. Room 지속성 라이브러리는 SQLite 를 활용하면서 데이터베이스에 쉽게 접근할 수 있도록 추상화 계층을 제공

  4. Room 의 주요 구성요소
    • Database class
    • DB 를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 엑세스 포인트 역할을 한다.
    • Data entities
    • 앱 데이터베이스의 테이블을 나타냅니다.
    • Data access object (DAOs)
    • 앱이 DB 의 데이터를 query, update, insert, delete 하는데 사용할 수 있는 메서드를 제공합니다.

 

 

  1. 데이터베이스 클래스가 데이터베이스와 연결된 DAO 인스턴스를 앱에 제공한다.
  2. 앱은 DAO 를 사용해서 DB 의 데이터를 연결된 Entities 인스턴스로 검색할 수 있게 된다.
  3. 앱은 정의된 Entities 를 사용하여 테이블의 행을 update 하거나 새로운 행을 삽입할 수 있다.

RoomDB 를 사용법

 

Entities

  • 실체라는 뜻으로 사람, 물건, 장소, 개념 등 어떤 것을 말합니다. 장바구니 앱에서 상품은 entity 입니다.
  • Room 을 사용해 앱 데이터를 저장할 때는 가장 먼저 Entities 를 정의해야 한다. 각 Entity 는 Room DB 의 테이블에 대응되며 각 인스턴스는 테이블의 데이터 행 하나를 나타낸다.

→ SQL 코드를 작성하지 않고 Room Entity 를 사용하여 DB 스키마를 정의할 수 있다

 

  • 기본적으로 클래스 이름을 DB 테이블 이름으로 사용한다. 다르게 하려면 tableName, name 을 지정해줄 수 있다.
  • 각 Room 항목은 각 행을 고유하게 식별하는 primary key 를 가져야 합니다.

 

DAO 정의

  1. 인터페이스나 추상 클래스로 정의할 수 있으며 일반적으로는 interface 를 사용한다.
  2. @Dao 어노테이션을 달고 하나 이상의 메서드를 정의해야한다.
  3. DAO 는 user 테이블의 데이터와 상호작용 할 수 있는 중간객체 역할을 하며 여러가지 메서드를 제공합니다.

 

DAO 메서드의 유형

  • 편의 메서드 : SQL 코드 작성 없이 DB 행을 삽입, 업데이트, 삭제
  • 쿼리 메서드 : 자체 SQL 쿼리 작성 기능 지원

Database class 정의

 

데이터 베이스를 보유할 AppDatabase 를 정의해야 한다.

AppDatabase 는 DB 구성을 정의하고 영속성 데이터에 대한 앱의 기본 액세스 포인트 역할을 한다.

Database 클래스 의 조건

  1. entities 배열이 포함되어야 한다.
  2. @Database 가 달려야 한다.
  3. RoomDatabase 를 상속하는 abstract class 한다.
  4. 인자가 0개이고 DAO 클래스 인스턴를 반환하는 abstract 메서드를 정의해야 한다.

 

Entities, DAO, DB 객체를 정의했다면 다음 코드를 사용해서 DB 데이터베이스 인스턴스를 만들 수 있다.

그 다음 AppDatabase 의 추상 메서드를 사용해 DAO 인스턴스를 가져올 수 있다.

DAO 인스턴스의 메서드를 사용해서 DB와 상호작용할 수 있다.