728x90
반응형
✅ 들어가기 전에
❗️ Room 관련 안드로이드 공식 문서
Room을 사용하여 로컬 데이터베이스에 데이터 저장 | Android 개발자 | Android Developers
Room 라이브러리를 사용하여 더 쉽게 데이터를 유지하는 방법 알아보기
developer.android.com
상당한 양의 구조화된 데이터를 처리하는 앱은 데이터를 로컬에 유지하여 매우 큰 이익을 얻을 수 있다.
가장 일반적인 사용 사례는 기기가 네트워크에 액세스할 수 없을 때도 사용자가 오프라인 상태로 계속 콘텐츠를 탐색할 수 있도록 관련 데이터를 캐시하는 것이다.
안드로이드에서는 위의 설명을 실현시키기 위해 Room이라는 내장 DB를 사용하는 것을 권장한다.
✅ Room이란?
- Room이란 쉽게 말해 스마트폰 내장 DB에 데이터를 저장하기 위해 사용하는 라이브러리이다.
- SQLite를 완벽히 활용하면서 원활한 데이터베이스 액세스가 가능하도록 SQLite의 추상화 계층을 ㅔㅈ공한다.
- Room의 이점은 다음과 같다.
- SQL 쿼리의 컴파일 시간 확인
- 반복적이고 오류가 발생하기 쉬운 상용구 코드를 최소화하는 편의 주석
- 간소화된 데이터베이스 이전 경로
- 이러한 이점 때문에 안드로이드는 SQLite를 사용하는 대신 Room 지속성 라이브러리를 사용하는 것을 권장한다.
✅ Room을 사용하려면?
- Room을 사용하기 위해서는 build.gradle 파일에 dependencies 값을 추가하여 sync해주면 된다.
✅ Room의 기본 구성요소
- Room에는 3가지 주요 구성요소가 있다.
- 데이터베이스 클래스 : 데이터베이스를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 액세스 포인트 역학을 한다.
- 데이터 항목 : 앱 데이터베이스의 테이블을 나타낸다.
- 데이터 액세스 객체(DAO) : 앱의 데이터베이스의 데이터를 쿼리, 업데이트, 삽입, 삭제하는 데 사용할 수 있는 메서드를 제공한다.
- 데이터베이스 클래스는 데이터베이스와 연결된 DAO 인스턴스를 앱에 제공한다.
- 앱은 DAO를 사용하여 데이터베이스의 데이터를 연결된 데이터 항목 객체의 인스턴스로 검색할 수 있게 된다.
- 앱은 정의된 데이터 항목을 사용하여 상응하는 테이블의 행을 업데이트하거나 삽입할 새 행을 만들 수도 있다.
✅ Room 구현해보기
📌 데이터 항목
- 다음 코드는 Word 데이터 항목을 정의한다.
- 각 Word 인스턴스는 앱 데이터베이스의 word 테이블에 있는 행 하나를 나타낸다.
- PrimaryKey 애너테이션을 통해 기본키를 설정할 수 있다.
- 자세한 사항은 https://developer.android.com/training/data-storage/room/defining-data?hl=ko 참고
data class Word(
val text : String,
val mean : String,
val type : String,
@PrimaryKey(autoGenerate = true)val id: Int = 0,
)
📌 데이터 액세스 객체(DAO)
- 다음 코드는 WordDao라는 DAO를 정의한다.
- WordDao는 앱의 나머지 부분이 word 테이블의 데이터와 상호작용하는 데 사용하는 메서드를 제공한다.
- 자세한 사항은 https://developer.android.com/training/data-storage/room/accessing-data?hl=ko 참고
@Dao
interface WordDao {
@Query("SELECT * from word ORDER BY id DESC") // 내림차순 쿼리
fun getAll(): List<Word>
@Query("SELECT * from word ORDER BY id DESC LIMIT 1")
fun getLatestWord() : Word
@Insert
fun insert(word: Word)
@Delete
fun delete(word: Word)
@Update
fun update(word: Word)
}
📌 데이터베이스
- 다음 코드는 데이터베이스를 보유할 AppDatabase 클래스를 정의한다.
- AppDatabase는 데이터베이스 구성을 정의하고 영구 데이터에 대한 앱의 기본 액세스 포인트 역할을 한다.
- 데이터베이스 클래스는 다음 조건을 충족해야 한다.
- 클래스에는 데이터베이스와 연결된 데이터 항목을 모두 나열하는 entities 배열이 포함된 @Database 주석이 달려야 한다.
- 클래스는 RoomDatabase를 확장하는 추상 클래스여야 한다.
- 데이터베이스와 연결된 각 DAO 클래스에서 데이터베이스 클래스는 인수가 0개이고 DAO 클래스의 인스턴스를 반환하는 추상 메서드를 정의해야 한다.
@Database(entities = [Word::class], version = 1)
abstract class AppDatabase: RoomDatabase() {
abstract fun wordDao() : WordDao
}
📌 최종 결과
- 데이터를 저장하게 되면 안드로이드 스튜디오 하단에 있는 App Inspection을 통해 확인할 수 있다.
- 위의 예제 코드는 아래 깃허브에서 확인할 수 있으며 단어장 앱을 활용한 Room Database 연습이 가능하다.
GitHub - Dahoonkk/Fast_Campus_Android_Lecture
Contribute to Dahoonkk/Fast_Campus_Android_Lecture development by creating an account on GitHub.
github.com
728x90
반응형
'Studying > Android' 카테고리의 다른 글
[Android] 안드로이드 디자인 패턴(2) - MVP 패턴 (0) | 2023.08.02 |
---|---|
[Android] 안드로이드 디자인 패턴(1) - MVC 패턴 (0) | 2023.08.02 |
[Android] 안드로이드 액티비티 생명주기(Activity Lifecycle) (0) | 2023.05.19 |
[Android] Android 기본 요소 - 4대 컴포넌트 (0) | 2023.05.15 |