728x90
반응형
Android에서 ROOM이란 무엇일까?
- ROOM은 데이터베이스의 데이터를 Java 또는 Kotlin 객체로 매핑해주는 ORM 라이브러리입니다.
- ORM(Object Relational Mapping)이란?
- 객체 지향 프로그래밍은 Class를 사용하고, 관계형 데이터베이스는 Table을 사용한다.
- 객체 모델과 관계형 모델 간에 불일치가 존재한다.
- ORM은 객체간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
- ORM(Object Relational Mapping)이란?
- ROOM은 SQLite에 대한 추상 레이어를 제공하여 SQLite의 모든 기능을 제공하면서 편리한 데이터베이스의 접근을 허용합니다.
- Google은 SQLite대신 ROOM을 사용하도록 권고하고 있습니다.
SQLite vs ROOM
- SQLite는 쿼리에 대한 에러를 컴파일 타임에 확인할 수 없지만, ROOM은 컴파일 타임에 SQL에 대한 유효성 검사를 할 수 있습니다.
- SQLite는 schema가 변경될 경우, SQL 쿼리를 수동으로 업데이트 해야하지만, ROOM은 쉽게 해결할 수 있습니다.
- SQLite는 Java 데이터 객체를 변경하기 위해 많은 boilerplate code를 사용해야 하지만, ROOM은 boilerplate code없이 매핑 가능하다. (boilerplate code: 수정하지 않거나, 최소한의 수정만을 거쳐 여러 곳에 필수적으로 사용되는 코드)
- ROOM은 LiveData와 RxJava를 위한 Observation으로 생성하여 동작할 수 있지만, SQLite는 할 수 없다.
ROOM의 구성 요소
ROOM은 아래와 같이 3가지 구성 요소(Database, Entity, Dao)가 있습니다.
Database
- 데이터베이스의 Holder를 구성하며, 지속적인 관계형 데이터의 기본 연결을 위한 Access Point 역할을 한다.
"@Database"로 annotation이 지정된 Class는 다음 조건을 충족해야 한다.
- RoomDatabase를 extends하는 abstract class여야 한다.
- Annotation 내에 entities를 포함해야 한다.
- Class 내부에 인수가 0개인 @Dao annotation이 지정된 Class를 반환하는 abstract class를 포함한다.
Entity
- Entity File은 Class의 변수들이 Column이 되어 Database의 table이 됩니다.
Annotation
- @Entity(tableName = StudentEntry.TABLE_NAME)
- Table 이름을 선언한다. (기본적으로 entity class 이름을 database table 이름으로 인식)
- @PrimaryKey
- 각 Entity는 1개의 PrimaryKey를 가져야한다.
- @ColumnInfo
- Table 내에 Column을 변수와 매칭한다.
Dao
- Dao는 database에 접근할 수 있는 메소드를 포함하며 SQL 쿼리를 지정할 수 있습니다.
Annotation
- @insert
- Entity set을 삽입한다. @Entity로 정의된 class만 인자로 받거나, 그 class의 Collection 또는 Array만 인자로 받을 수 있습니다. 인자가 하나인 경우, long type의 Return (insert된 row id)을 받을 수 있고, 여러 개인 경우, long[], List를 받을 수 있습니다.
- @update
- Entity set을 갱신한다. Return값으로 업데이터 된 행 수를 받을 수 있습니다.
- @delete
- Entity set을 삭제한다. Return값으로 삭제된 행 수를 받을 수 있습니다.
- @query
- @query를 사용하여 DB를 조회할 수 있습니다. 컴파일 타임에 return되는 object의 field와 SQL결과로 나오는 Column의 이름이 맞는지 확인하여 일부가 match되면 warning, match되는게 없다면 error를 보낸다.
이후 포스팅에서는 ROOM + ViewModel + LiveData + RecylcerView를 활용한 미니 프로젝트를 진행해보도록 하겠습니다.
728x90
반응형
'Android > study_til' 카테고리의 다른 글
[AOS] Room + ViewModel + LiveData + RecyclerView (2) (0) | 2021.06.28 |
---|---|
[AOS] Room + ViewModel + LiveData + RecyclerView (1) (0) | 2021.06.28 |
[AOS] RecyclerView의 원리와 사용법 (2) | 2021.06.09 |
[AOS] Fragment의 생명 주기 (0) | 2021.05.23 |
아키텍쳐 디자인 패턴 - MVP란? (0) | 2021.05.21 |