[Android/Kotlin] Room

JINA·2021년 11월 16일
0
post-thumbnail

🎪Room

Room은 로컬 데이터베이스에 데이터를 저장할때 사용한다. 기기가 네트워크에 액세스할 수 없을때 오프라인 상태일때도 사용자가 여전히 콘텐츠를 탐색할 수 있으며 기기가 다시 온라인 상태가 되면 콘텐츠 변경사항이 서버에 동기화된다. Room은 위와 같은 문제를 자동으로 처리하기 때문에 SQLite 대신 Room을 사용할 것을 권장하고있다.

Room 구조

📌Room의 구성요소 3가지

  1. Room Database: 데이터베이스를 생성하고 관리하는 데이터베이스 객체 만들기 위한 추상 클래스
  2. DAO: Data Access Object의 약자로 Dao를 통해 쿼리문을 사용해 데이터베이스에 접근하는 인터페이스이다.
  3. Entities: 데이터베이스 내의 테이블

Room 사용방법

Entity

  • Entitiy에는 하나 이상의 기본키(@PrimaryKey)를 설정해야한다.
  • 열로 사용할 변수 설정은 @CcolumnInfo 어노테이션을 적어주면 된다. 기본적으로 변수 명은 열 이름이 되지만 별도로 열 이름을 설정하고 싶다면 위의 코드처럼 name 속성을 주면된다.

DAO

  • DAO로 정의하기 위해선 @Dao라는 어노테이션이 필요하다.

  • @Insert를 붙이면 테이블에 데이터 삽입, @Update를 붙이면 테이블의 데이터 수정, @Delete를 붙이면 테이블의 데이터 삭제이다.

  • 이 외에 다른 기능을 하는 메서드를 만들고 싶다면
    @Query 어노테이션을 붙이고 그 안에 어떤 동작을 할 건지 sql 문법으로 작성한다.


Database

  • @Database 어노테이션이 필요하다.
  • 클래스는 추상 클래스로 작성되어야 한다.
  • RoomDatabase()를 상속해야하며 매개 변수가 없는 추상 메서드를 포함해야한다. 반환값은 DAO이다.
  • version은 앱을 업데이트하다가 entity의 구조를 변경해야 하는 일이 생겼을 때 이전 구조와 현재 구조를 구분해주는 역할을 한다. 만약 구조가 바뀌었는데 버전이 같다면 에러가 뜨며 디버깅이 되지 않는다. 처음 데이터베이스를 생성하는 상황이라면 그냥 1을 넣어주면 된다.

코드 내에서 사용하기

코드에서사용할때 Room.databaseBuilder를 사용하여 onCreate 내부에 선언해주면 된다.

🙆‍♀️싱글톤 패턴을 사용한 경우(공식문서에서 권장하는 방법)

val db = AppDatabase.getInstance(applicationContext)

🙅‍♀️싱글톤 패턴을 사용안한 경우

    val db = Room.databaseBuilder(
                applicationContext,
                AppDatabase::class.java, "database-name"
            ).build()
    

0개의 댓글