Room은 로컬 데이터베이스에 데이터를 저장할때 사용한다. 기기가 네트워크에 액세스할 수 없을때 오프라인 상태일때도 사용자가 여전히 콘텐츠를 탐색할 수 있으며 기기가 다시 온라인 상태가 되면 콘텐츠 변경사항이 서버에 동기화된다. Room은 위와 같은 문제를 자동으로 처리하기 때문에 SQLite 대신 Room을 사용할 것을 권장하고있다.
📌Room의 구성요소 3가지
Entity
@PrimaryKey
)를 설정해야한다.@CcolumnInfo
어노테이션을 적어주면 된다. 기본적으로 변수 명은 열 이름이 되지만 별도로 열 이름을 설정하고 싶다면 위의 코드처럼 name 속성을 주면된다.DAO
DAO로 정의하기 위해선 @Dao
라는 어노테이션이 필요하다.
@Insert
를 붙이면 테이블에 데이터 삽입, @Update
를 붙이면 테이블의 데이터 수정, @Delete
를 붙이면 테이블의 데이터 삭제이다.
이 외에 다른 기능을 하는 메서드를 만들고 싶다면
@Query
어노테이션을 붙이고 그 안에 어떤 동작을 할 건지 sql 문법으로 작성한다.
Database
코드 내에서 사용하기
코드에서사용할때 Room.databaseBuilder를 사용하여 onCreate 내부에 선언해주면 된다.
🙆♀️싱글톤 패턴을 사용한 경우(공식문서에서 권장하는 방법)
val db = AppDatabase.getInstance(applicationContext)
🙅♀️싱글톤 패턴을 사용안한 경우
val db = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java, "database-name"
).build()