운기의 블로그
안드로이드 - ROOM 사용하기 본문
1. 안드로이드 저장소
저번에 쉐어드 프리퍼런스에 대해 소개하면서 안드로이드에서는 앱 데이터나 파일을 저장하는 방법에 대해서 간략하게 설명했다.
쉐어드 프리퍼런스가 키 - 값 쌍 으로 데이터를 저장한다면
ROOM은 로컬 데이터베이스에 저장하는 방식이다.
2. ROOM 사용할 때
ROOM을 사용하는 경우는 안드로이드 가이드에서는 아래와 같이 설명하고 있다.
Apps that handle non-trivial amounts of structured data can benefit greatly from persisting that data locally. The most common use case is to cache relevant pieces of data so that when the device cannot access the network, the user can still browse that content while they are offline.
-> 사소하지 않은, 즉 구조화된 데이터의 양이 많은걸 다루는 앱은 데이터를 로컬에 유지함으로 큰 이익을 얻을 수 있다.
가장 일반적인 사례로는 관련된 데이터의 일부를 캐시하는것이다. 다시말하자면, 안드로이드가 네트워크에 접근하지 못할때, 유저는 오프라인 상태에서도 계속해서 내용물을 탐색할 수 있다.
즉 유저에게 필요한 데이터를 서버와 통신 없이도 로컬에 저장해 영구 보관하는 용도로 사용된다.
3. ROOM 사용 이유, 장점
- SQL 쿼리의 컴파일 시간 확인
- 반복적이고 오류가 발생하기 쉬운 상용구 코드를 최소화
- 간소화 된 데이터베이스 이전 경로
라고 설명되어있다.
4. ROOM 구조
Room에는 세가지 주요 구성요소가 있다.
Database class
Data entities
Data access objects (Dao)
하나하나 알아보도록 하자.
Database class란?
- The database class that holds the database and serves as the main access point for the underlying connection to your app's persisted data.
-> 데이터베이스 클래스는 데이터베이스를 유지하고, 당신의 앱의 영구적인 데이터를 가져오는 주요 접근 지점의 역할을 한다. 즉 데이터 베이스 클래스를 통해서 데이터를 가져 올 수 있단 말이다.
Data entities
- Data entities that represent tables in your app's database.
-> 당신의 앱의 데이터베이스 테이블이다.
좀 더 자세히 보면 데이터 베이스의 행에 저장된 데이터를 업데이트하고 삽입할 새행을 만드는데 사용된다는 말이다.
Data access objects (Dao)
- Data access objects (DAOs) that provide methods that your app can use to query, update, insert, and delete data in the database.
-> 데이터베이스의 데이터를 검색 및 업데이트, 삽입, 삭제하는 데 사용하는 메서드를 제공한다는 말이다.
4. ROOM 사용법
1) data class를 생성해서 entity 를 생성
해당 데이터는
아래 표와 같이 데이터베이스 테이블의 entity fields로 들어가게 된다.
uid | expression | result |
1 | .... | ..... |
2 | .... | ..... |
그리고 해당 데이터베이스의 테이블 이름을 정해주고 싶다면
@entity 어노테이션 옆에 테이블 이름을 넣어준다.
2) 데이터베이스 entity fields에 접근하기 위한 Dao 생성
앱에서 데이터 베이스에 접근하기 위해서 Dao 객체를 사용해준다.
Dao 객체에서는 조회, 삽입, 삭제 와 같은 기능을 제공하는 인터페이스다.
3) 데이터 베이스 클래스 생성
entities에 field의 목록이 있는 클래스를 넣어준다.
즉 여기에서는 1번 데이터클래스에서 생성한 클래스를 넣어준다.
그리고 version은 맨 처음에는 1로 두고 그 이후 테이블의 스키마를 변경할 때 버전을 올려주면된다.
4) 사용하기
private lateinit var db: AppDatabase
db = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java,
"historyDB"
).build()
db.historyDao().getHistoryAll().reversed()
위와 같은 방식으로 데이터베이스 클래스(AppDatabase)를 생성하고, 데이터베이스 클래스가 가지고 있는 Dao 객체를 이용해 field의 값을 조회하거나 생성, 삭제를 할 수 있다.
'안드로이드' 카테고리의 다른 글
코루틴 - 비동기 / 동시성 (1) | 2023.12.26 |
---|---|
코루틴 - 코루틴의 뜻 (0) | 2023.12.26 |
안드로이드 - tableLayout 자동 정렬 (0) | 2022.04.09 |
안드로이드 - SharedPreference (0) | 2022.04.08 |
안드로이드 - 폰트 추가하기 (0) | 2022.03.31 |