[kotlin] Room 라이브러리의 TypeConverter 사용법

Room 라이브러리를 사용하면 안드로이드 앱에서 데이터베이스를 쉽게 관리할 수 있습니다. 하지만 때때로 데이터베이스에 저장할 데이터 유형이 Room이 지원하는 기본 유형이 아닐 수 있습니다. 이럴 때 Room에서 TypeConverter를 사용하여 데이터 유형을 변환하고 저장할 수 있습니다.

TypeConverter 생성

우선 Room의 TypeConverter를 사용하기 위해서는 아래 예시와 같이 데이터 유형을 변환할 수 있는 TypeConverter 클래스를 작성해야 합니다.

import androidx.room.TypeConverter
import java.util.Date

class Converters {
    @TypeConverter
    fun toDate(timestamp: Long?): Date? {
        return timestamp?.let { Date(it) }
    }

    @TypeConverter
    fun toTimestamp(date: Date?): Long? {
        return date?.time
    }
}

위의 예시에서 Converters 클래스는 날짜와 시간 데이터를 변환하는 두 개의 함수를 제공합니다. @TypeConverter 어노테이션을 각각의 함수에 적용하여 Room 라이브러리에서 이들을 TypeConverter로 인식하게 합니다.

데이터베이스 클래스에 TypeConverters 추가

다음으로, 데이터베이스 클래스에서 방금 작성한 TypeConverter 클래스를 사용하도록 정의해야 합니다.

import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters

@Database(entities = [YourEntity::class], version = 1)
@TypeConverters(Converters::class)
abstract class YourDatabase : RoomDatabase() {
    // 데이터베이스와 관련된 작업들
}

위의 예시에서 YourDatabase 클래스에 @TypeConverters 어노테이션을 사용하여 방금 작성한 TypeConverter 클래스를 지정합니다.

사용 예시

이제 Room 라이브러리에서는 데이터베이스에 저장될 때 Date 객체를 자동으로 변환하여 저장하고, 저장된 값을 다시 Date 객체로 자동 변환하여 가져올 수 있습니다.

@Entity
data class YourEntity(
    @PrimaryKey val id: Int,
    val name: String,
    val createdAt: Date
)

위의 예시에서 createdAt 필드는 Date 객체이며, Room 라이브러리에서 지정한 TypeConverter에 따라 데이터베이스에 저장 및 검색될 때 자동으로 변환됩니다.

이것으로 Room 라이브러리에서 TypeConverter를 사용하는 방법에 대한 간단한 소개를 마칩니다. 필요에 따라 적절한 TypeConverter 클래스를 작성하여 Room 데이터베이스에서 사용자 정의 데이터 유형을 효과적으로 처리할 수 있습니다.

더 자세한 정보는 Room Persistence 라이브러리 공식 문서를 참고하시기 바랍니다.