- 로컬 DB 를 사용
- 상당한 양의 데이터를 처리하는 앱은 데이터를 로컬에 저장하여 매우 큰 이익을 얻을 수 있습니다.
- 예시로 네트워크에 액세스할 수 없을 때도 사용자가 오프라인 상태로 콘텐츠를 탐색할 수 있도록 캐시
- Room DB란Room 의 장점
- SQL 쿼리의 컴파일 시간 확인
- 반복적이고 오류가 발생하기 쉬운 boilerplate 코드를 최소화할 수 있는 편리한 어노테이션 제공
- 간소화된 DB 이전 경로
- Room 지속성 라이브러리는 SQLite 를 활용하면서 데이터베이스에 쉽게 접근할 수 있도록 추상화 계층을 제공
- Room 의 주요 구성요소
- Database class
- DB 를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 엑세스 포인트 역할을 한다.
- Data entities
- 앱 데이터베이스의 테이블을 나타냅니다.
- Data access object (DAOs)
- 앱이 DB 의 데이터를 query, update, insert, delete 하는데 사용할 수 있는 메서드를 제공합니다.
- 데이터베이스 클래스가 데이터베이스와 연결된 DAO 인스턴스를 앱에 제공한다.
- 앱은 DAO 를 사용해서 DB 의 데이터를 연결된 Entities 인스턴스로 검색할 수 있게 된다.
- 앱은 정의된 Entities 를 사용하여 테이블의 행을 update 하거나 새로운 행을 삽입할 수 있다.
RoomDB 를 사용법
Entities
- 실체라는 뜻으로 사람, 물건, 장소, 개념 등 어떤 것을 말합니다. 장바구니 앱에서 상품은 entity 입니다.
- Room 을 사용해 앱 데이터를 저장할 때는 가장 먼저 Entities 를 정의해야 한다. 각 Entity 는 Room DB 의 테이블에 대응되며 각 인스턴스는 테이블의 데이터 행 하나를 나타낸다.
→ SQL 코드를 작성하지 않고 Room Entity 를 사용하여 DB 스키마를 정의할 수 있다
- 기본적으로 클래스 이름을 DB 테이블 이름으로 사용한다. 다르게 하려면 tableName, name 을 지정해줄 수 있다.
- 각 Room 항목은 각 행을 고유하게 식별하는 primary key 를 가져야 합니다.
DAO 정의
- 인터페이스나 추상 클래스로 정의할 수 있으며 일반적으로는 interface 를 사용한다.
- @Dao 어노테이션을 달고 하나 이상의 메서드를 정의해야한다.
- DAO 는 user 테이블의 데이터와 상호작용 할 수 있는 중간객체 역할을 하며 여러가지 메서드를 제공합니다.
DAO 메서드의 유형
- 편의 메서드 : SQL 코드 작성 없이 DB 행을 삽입, 업데이트, 삭제
- 쿼리 메서드 : 자체 SQL 쿼리 작성 기능 지원
Database class 정의
데이터 베이스를 보유할 AppDatabase 를 정의해야 한다.
AppDatabase 는 DB 구성을 정의하고 영속성 데이터에 대한 앱의 기본 액세스 포인트 역할을 한다.
Database 클래스 의 조건
- entities 배열이 포함되어야 한다.
- @Database 가 달려야 한다.
- RoomDatabase 를 상속하는 abstract class 한다.
- 인자가 0개이고 DAO 클래스 인스턴를 반환하는 abstract 메서드를 정의해야 한다.
Entities, DAO, DB 객체를 정의했다면 다음 코드를 사용해서 DB 데이터베이스 인스턴스를 만들 수 있다.
그 다음 AppDatabase 의 추상 메서드를 사용해 DAO 인스턴스를 가져올 수 있다.
DAO 인스턴스의 메서드를 사용해서 DB와 상호작용할 수 있다.
'Android' 카테고리의 다른 글
[안드로이드] Flow 공식문서로 이해하기 - 1차 Flow 기초 (0) | 2023.08.25 |
---|---|
[안드로이드] ViewModel 테스트하기 : [우아한테크코스 5기 AN_베르] (0) | 2023.07.22 |
[안드로이드] Fragment Lifecycle (프래그먼트 생명 주기) (0) | 2023.05.30 |
[안드로이드] Fragment(프래그먼트) 와 Fragment Manager (0) | 2023.05.08 |
[안드로이드] Activity LifeCycle (0) | 2023.05.01 |