티스토리 뷰
오늘은 안드로이드에서 Room 데이터베이스를 사용할 때, TypeConverter를 사용하는 방법을 알아보겠습니다.
복잡한 데이터 타입을 데이터베이스에 저장하려면 TypeConverter를 사용해야 합니다. 만약 data class 안에 항목이 여러 개 있고, 이를 데이터베이스에 저장하고자 한다면, 일반적으로 JSON 형태로 변환하여 저장하는 방법을 사용합니다. 이를 위해 Gson 라이브러리나 Moshi, Kotlinx.serialization과 같은 JSON 변환 라이브러리를 사용할 수 있습니다.
다음은 Gson을 사용하여 data class를 JSON 문자열로 변환하고, JSON 문자열을 다시 data class로 변환하는 TypeConverter 예제입니다.
먼저, Gson 라이브러리를 프로젝트의 build.gradle 파일에 추가합니다.
dependencies {
implementation 'com.google.code.gson:gson:2.8.8'
}
다음으로, 변환하고자 하는 data class를 정의합니다. 예를 들어, User 클래스가 있다고 가정해 보겠습니다.
data class User(val name: String, val age: Int)
이제 User 클래스 인스턴스를 JSON 문자열로 변환하고, JSON 문자열을 다시 User 인스턴스로 변환하는 TypeConverter를 정의합니다.
import androidx.room.TypeConverter
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
class Converters {
@TypeConverter
fun fromUserToJson(value: User): String {
val gson = Gson()
val type = object : TypeToken<User>() {}.type
return gson.toJson(value, type)
}
@TypeConverter
fun fromJsonToUser(value: String): User {
val gson = Gson()
val type = object : TypeToken<User>() {}.type
return gson.fromJson(value, type)
}
}
마지막으로, Room 데이터베이스 클래스에 이 TypeConverter를 적용합니다.
import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
@Database(entities = [YourEntity::class], version = 1)
@TypeConverters(Converters::class)
abstract class AppDatabase : RoomDatabase() {
// 데이터베이스 관련 코드
}
이제 User 타입의 데이터를 JSON 문자열로 변환하여 데이터베이스에 저장할 수 있으며, 데이터베이스에서 데이터를 조회할 때는 JSON 문자열을 다시 User 인스턴스로 변환하여 사용할 수 있습니다.
이 방법을 통해 data class 안에 항목이 여러 개 있는 경우에도 데이터베이스에 저장하고 조회하는 것이 가능해집니다.
'Android' 카테고리의 다른 글
[Android] YoYo 애니메이션 라이브러리 동작 취소 (0) | 2024.06.05 |
---|---|
[Android] 빌드 변형 (Build Variants) 사용하기 (0) | 2024.04.25 |
[Android] YoYo 애니메이션 라이브러리 (0) | 2024.04.12 |
[Android] TextClock 동적으로 Format 변경 및 언어 변경 (0) | 2024.04.11 |
[Android] 언어 변경 (0) | 2024.04.11 |
- Total
- Today
- Yesterday
- Insert
- TextClock
- manifestPlaceholders
- 홈체크
- e편한세상 부평역 센트럴파크
- 빌드 변형
- TextClock 상속
- TextClock 언어 변경
- 데이터베이스
- 안드로이드
- mysql
- build variants
- 언어 변환
- 스마트폰
- kotlin
- 이부센
- 이미지 로딩 라이브러리
- removeAt
- 개별 빌드
- TextClock Format
- Database
- Gif 로딩
- java
- 나중에 들어온 아이템 삭제
- yoyo
- Android
- 사전점검 대행
- 리눅스
- Coil 0.10.0
- Locale 변경
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |