-
(jetpack) ROOM 사용 방법개발/Android 2021. 7. 12. 18:09
(jetpack) ROOM 사용 방법
Android에서 로컬로 데이터베이스를 사용하는 고전적인 방법으로는 sqlLite가 있다.
더 간단하게 메모장처럼 사용하는 방식은 sharedPreference가 있다.
android develop 사이트에서 sqlLite에 대한 설명
현재는 위와같은 이유로 jetpack 라이브러리에서 Room 라이브러리를 만들고 sqlite대신 사용하기를 권장하고 있음
Room DB 의 장점
Room은 SQLite에 대한 추상화 레이어를 제공하여 원활한 데이터베이스 액세스를 지원하는 동시에 SQLite를 완벽히 활용가능.
상당한 양의 구조화된 데이터를 처리하는 앱은 데이터를 로컬로 유지하여 이점을 얻을 수 있다.. 가장 일반적인 사용 사례는 관련 데이터를 캐싱하는 것. 이런 방식으로 기기가 네트워크에 액세스할 수 없을 때 오프라인 상태인 동안에도 사용자가 여전히 콘텐츠를 탐색 가능.
Room은 이러한 문제를 자동으로 처리하므로 SQLite 대신 Room을 사용할 것을 적극적으로 권장하고 있음.
Room db 동작 원리
build.gradle
아래와 같이 종속항목 추가
Room의 세가지 주요 구성요소
- Database - 데이터 연결을 위한 기본 접근 포인트 역할을 함
- @Database로 지정된 클래스가 접근포인터 역할
- RoomDatabase를 확장하는 추상클래스여야 함
- 인수가 0개이며 @Dao로 주석이 지정된 클래스를 반환하는 추상메서드를 포함해야함
- Entity - 데이터베이스의 테이블을 나타냄
- DAO - 데이터 베이스를 crud하기 위해 사용되는 메서드가 포함되어야 함
위의 3가지 필수요소들이 있어야 하고 실제 동작은 아래 그림과 같이 동작하게 됨.
예제로 Todo라는 title과 id를 가진 데이터베이스 테이블을 만들고 해당 데이터베이스를 crud 할수 있도록 구성해봄
- data class 생성
데이터 클래스는 @Entity 어노테이션이 붙여줘야함 그래야 데이터베이스 테이블로서의 역할을 할수 있다.
@PrimaryKey - 해당 어노테이션을 붙이면 붙인 변수가 유일키로서 역할을 하게됨
(autoGenerate = true) 데이터 베이스 생성시 자동으로 id값이 증가 되게끔 하는 기능
2. DAO 클래스 생성
데이터베이스의 데이터를 crud 하기위한 클래스를 생성해야함
위와 같이 어노테이션만 붙여줌으로서 간단하게 crud를 할수있는 클래스 생성 가능
3. Database 클래스 생성
db접근 포인터 역할을 할 객체의 클래스 생성@Database어노테이션을 붙여주고, entities에 각 테이블을 지정해둠
Roomdatabase를 상속받음
만든 DAO클래스를 추상메서드로 포함시켜야함
사용방법
database build 후
db.todoDao().insert("내용") 이런식으로 db CRUD 가능!
- 코틀린 사용시 주의사항
종속성 추가 시 annotationProcessor 'androidx.room:room-compiler:2.2.5' 대신
kapt 'androidx.room:room-compiler:2.2.5' 로 바꿔주어야함
kapt 사용시에는 apply plugin: 'kotlin-kapt' 종속성도 추가해야함
'개발 > Android' 카테고리의 다른 글
Android Room TypeConverters (0) 2021.07.19 (jetpack) LiveData (0) 2021.07.16 Android 데이터 직렬화 (0) 2021.07.15 android notification 즉시응답 (0) 2021.07.15 android 이미지 다중선택 (0) 2021.07.13