개요
이 문서는 Kotlin에서 데이터 Serialization(직렬화) 시 사용하는 kotlinx.serialization 라이브러리에 대해 소개합니다.
Serialization(직렬화)은 프로그램에서 사용하는 데이터 객체를 특정 포맷의 문자열로 변환하는 프로세스이고,
Deserialization(역직렬화)은 외부 소스에서 받은 문자열을 데이터 객채로 변환하는 프로세스입니다.
일반적으로 API 호출 시 Json 포맷의 response를 Deserialization(역직렬화)하는 데 사용합니다.
kotlinx.serialization 라이브러리의 특징
- 순수 Kotlin 언어로 작성
- 다양한 포맷 지원(JSON, Protobuf, CBOR, Hocon, Properties)
- Kotlin Multiplatform 환경 지원
- Kotlin을 개발한 JetBrains의 공식 라이브러리
프로젝트에 설정하는 방법
https://github.com/Kotlin/kotlinx.serialization#setup
사용하는 방법
1. 직렬화 시 사용하는 데이터 class에 @Serializable 어노테이션을 추가합니다.
@Serializable
data class Person(
var id: Int,
var name: String,
var age: Int
)
2. Json.encodeToString()를 호출하여 데이터 instance를 serialize(직렬화)합니다.
val json = Json.encodeToString(Person(0, "Harry", 30))
println(json)
// {"id":0,"name":"Harry","age":30}
3. decodeFromString()를 호출하여 Json 포맷의 문자열을 deserialize(역직렬화)합니다.
val obj = Json.decodeFromString<Person>("""{"id":0,"name":"Harry","age":30}""")
println(obj)
// Person(id=0, name=Harry, age=30)
특징
- @Serializable 어노테이션을 사용하는 이유 :
기존에 직렬화 시 사용하던 Gson 라이브러리는 reflection 방식을 사용하여 runtime에 객체를 변환하기에 해당 클래스에 어노테이션을 선언하지 않아도 동작했습니다. 하지만 Kotlin Serialization은 reflection 방식을 사용하지 않기에 @Serializable 어노테이션을 통해 Kotlin Serialization plugin에 직렬화 시 해당 클래스를 생성하고 연결하도록 지시합니다. - 다양한 통신 라이브러리에서 사용 가능
Retrofit 2에서 컨버터로 지정하는 방법
Ktro에서 Serialization로 지정하는 방법
참고
https://kotlinlang.org/docs/serialization.html
https://github.com/Kotlin/kotlinx.serialization
'Android' 카테고리의 다른 글
Realm Database 암호화하여 안전하게 관리하는 방법 (0) | 2024.03.15 |
---|---|
Coroutines 이것만 알고 사용하자! (0) | 2024.01.15 |
[Android] Health Connect (0) | 2022.08.10 |
[Android] Fastlane 적용하여 빌드 및 배포 자동화 (0) | 2022.05.24 |
[Android] 다른 앱 사용기록 조회 (0) | 2022.05.08 |