춤추는 개발자

[AOS] ROOM이란? 본문

Android/study_til

[AOS] ROOM이란?

Heon_9u 2021. 6. 24. 17:40
728x90
반응형

Android에서 ROOM이란 무엇일까?

  • ROOM은 데이터베이스의 데이터를 Java 또는 Kotlin 객체로 매핑해주는 ORM 라이브러리입니다.

    • ORM(Object Relational Mapping)이란?

      • 객체 지향 프로그래밍은 Class를 사용하고, 관계형 데이터베이스는 Table을 사용한다.
      • 객체 모델과 관계형 모델 간에 불일치가 존재한다.
      • ORM은 객체간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
  • 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)가 있습니다.

 

https://developer.android.com/images/training/data-storage/room_architecture.png?hl=ko

 

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
반응형