MVVM AAC Room사용법(1.개념편)

이종현(JongHyunLee)
5 min readMar 26, 2019

--

해당 문서는 안드로이드 공식 문서를 기반으로 만들어졌습니다.
공식문서:
https://developer.android.com/topic/libraries/architecture/room?hl=ko

Jetpack AAC(Android Architecture Components 이하 AAC)를 이용하기 위해서는 기본 안드로이드 개발지식이 필요합니다. 때문에 안드로이드에 대한 기본 지식이 있다는 가정하에 포스팅을 진행하도록 하겠습니다.

기존 안드로이드의 SQL Lite는 사용이 매우 불편하여 ORMLite, greenDAO 등과 같은 ORM(Object-relational mapping)을 이용하여 컨트롤 하는게 일반적이었습니다.

기존 사용하던 ORM의 종류 및 퍼포먼스에 대해서는 Naver D2 ORM에 매우 잘 나와있으며 링크 남겨두겠습니다.

Room은 구글에서만든 공식 ORM이라고 할 수 있으며 여러가지 강력한 기능들을 지원하고 있습니다.(물론 SQLite를 직접 이용할 수 있습니다.)

라이브러리를 사용하기전에 최소 호환버전을 확인하는것은 매우 중요한 작업이며 습관화하는게 좋습니다. 공식문서에는 나와있지는 않지만 구글 샘플코드를 살펴본 결과 14버전 이상이면 사용이 가능할 것으로 보입니다.

1. 구성요소

Room은 3가지 구성 요소를 가지며 특징은 아래와 같습니다.

Database

Database 접근 지점을 제공하며 DAO를 관리합니다.
Annotation내에 사용할 Entity목록을 작성해야 합니다.

DAO(Data Access Object)

Database에 접근하는 메소드들을 포함하며 Annotation으로 관리됩니다.
LiveData를 이용하면 Observable query를 이용할 수 있습니다.

Entity

테이블을 의미합니다.

Room architecture diagram

2. 안드로이드 개발의 시작! Setting

우리는 androidX를 사용할 것이기 때문에 프로젝트 생성시에 Use AndroidX artifacts를 채크 해줍시다.

check Use AndroidX artifacts

이후 모듈 수준의 gradle파일에 Room 라이브러리를 추가해줍니다.

3. Database

RoomDatabase 인스턴스를 만드는 과정은 매우 비싼 작업입니다. 하지만 접근은 자주하죠. 그렇기때문에 공식 문서에서는 Database instance는 singleton패턴을 이용하여 만드는 것을 권장하고 있습니다.

If your app runs in a single process, you should follow the singleton design pattern when instantiating an AppDatabaseobject. Each RoomDatabase instance is fairly expensive, and you rarely need access to multiple instances within a single process.

@Database annotation을 이용하여 사용할 Entity를 배열로 반드시 입력해야하며, userDao또한 RoomDatabase에서 관리 권한을 위임하여 직접적으로 접근을 막아야 합니다.

database

4. Dao

@Dao Annotation을 활용하며 interface, abstract class로 작성해야 합니다.

query 구문 또한 Annotation으로 작성되어야 하며, 문자열 안에 있는 query의 자동완성을 지원합니다.(매우편하네요.)

getAll() 메소드는 현재는 그냥일반 쿼리 구문이지만 다음 편에 Observable query로 변경하는 방법을 표현하도록 하겠습니다.

또한 실질적으로 가장 중요한 부분이기 때문에 다음 포스팅에 조금 더 자세히 다뤄보도록 하겠습니다.

dao

5. Entity

Entity의 이름을 지정 할 수도 있지만, 지정하지 않을경우 default값으로 클래스의 이름이 지정되며 대소문자를 구분하지 않습니다.

컬럼값도 위의 규칙과 동일합니다.

entity

마무리

dao, entitiy같은 경우 내용이 너무 많아 분량 조절에 실패했습니다… 이번 포스팅에서는 느낌만 보고 다음포스팅에서 자세하게 다루도록 하겠습니다.

전체 소스코드는 깃허브에 올려두도록 하겠습니다.
https://github.com/gus0000123/RoomSample
branch : Room 사용법(1.개념편)

추가

Google I/O 2021에서 Room Code Lap이 추가되었습니다.

https://developer.android.com/codelabs/android-room-with-a-view-kotlin#0

이상 안드로이드 개발자 이종현이었습니다.
재밌게 읽으셨다면 👏🏻눌러 주시는 것도 잊지말아주세요~ 저에게 큰 힘이됩니다. :)

읽어주셔서 감사합니다~

--

--