티스토리 뷰

Android

[Android] Room에서 TypeConverter 사용하기

도토리흑미 2024. 5. 16. 21:18

오늘은 안드로이드에서 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 안에 항목이 여러 개 있는 경우에도 데이터베이스에 저장하고 조회하는 것이 가능해집니다.