[안드로이드] Room Local DB

2023. 5. 22. 16:08· Android
  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와 상호작용할 수 있다.

저작자표시 (새창열림)

'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
'Android' 카테고리의 다른 글
  • [안드로이드] ViewModel 테스트하기 : [우아한테크코스 5기 AN_베르]
  • [안드로이드] Fragment Lifecycle (프래그먼트 생명 주기)
  • [안드로이드] Fragment(프래그먼트) 와 Fragment Manager
  • [안드로이드] Activity LifeCycle
베르_최성훈
베르_최성훈
베르_최성훈
베르의 안드로이드
베르_최성훈
전체
오늘
어제
  • 분류 전체보기 (59) N
    • Android (19)
    • kotlin (2)
    • 책 (2)
    • 우아한테크코스 (15)
    • 회고 (5)
    • Bug Fix (2)
    • 알고리즘 (6)
    • Jetpack Compose (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • MVVM
  • coroutine
  • Test
  • Android
  • flow
  • Kotlin
  • ViewModel
  • 우테코
  • 생명주기
  • PRESENTER
  • 코틀린
  • 안드로이드
  • 페스타고
  • SharedFlow
  • FRAGMENT
  • 우아한테크코스
  • 프래그먼트
  • Lifecycle
  • 회고
  • MVP

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
베르_최성훈
[안드로이드] Room Local DB
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.