문제 파악
직렬화의 의미를 자바를 공부하면서 익혔기 때문에, 직렬화란 객체를 바이트 스트림으로 변환하는 것인 줄 알았다.
직렬화의 의미를 이렇게 알고 있었기 때문에 Kotlin Serialization이 객체를 Json으로 변환한다는 글을 보고 😯 오잉했다. Json은 문자열 기반이라 바이트 스트림이 절대 아니기 때문이다.
Serailization의 정의를 다시 살피고, Java의 Serailization과 Kotlin Serailiztion에 대해서 비교하려고 한다.
Serailization 정의
https://ko.wikipedia.org/wiki/%EC%A7%81%EB%A0%AC%ED%99%94
직렬화(直列化) 또는 시리얼라이제이션(serialization)은 컴퓨터 과학의 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장(이를테면 파일이나 메모리 버퍼에서, 또는 네트워크 연결 링크 간 전송)하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정이다.
위키백과에서 나온 직렬화의 정의이다.
https://kotlinlang.org/docs/serialization.html
Serialization is the process of converting data used by an application to a format that can be transferred over a network or stored in a database or a file.
직렬화는 애플리케이션이 사용하는 데이터를 네트워크를 통해 전달될 수 있거나 데이터베이스나 파일 안에 저장되는 포맷으로 변환하는 과정입니다.
Kotlin Seriailzation 라이브러리르 설명하는 공식 문서에서 나온 직렬화의 정의이다.
직렬화의 의미는 데이터 혹은 객체를 전송가능한 포맷으로 바꾸는 것이라고 말할 수 있다.
자바는 데이터 전송을 바이트 스트림으로 하기 위한 직렬화를 하는 것이고, 코틀린에서는 Json과 그 외의 포맷으로 직렬화를 하는 것임을 이해했다.
Java의 Serailization과 Kotlin Serailization의 차이
특징 | Java Serailization | Kotlin Serailization |
직렬화 포맷 | 바이트 스트림 | Json, CBOR, Protocol Buffers, Properties 등 |
기본 포맷 | 바이트 스트림 | Json |
플랫폼 종속성 | JVM에 종속 | 플랫폼 독립적 |
읽기 용이성 | 사람이 읽을 수 없음 | 사람이 읽을 수 있는 포맷(Json) 제공 |
Java의 Serailization 관련 글
Kotlin Serailization
https://kotlinlang.org/docs/serialization.html
https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/serialization-guide.md
Java의 Serialization이 있음에도 Kotlin의 Serialization이 등장한 이유, 이것을 사용하는 이유는 무엇일까
Java의 Serialization와 Kotlin의 Serialization의 차이를 비교하면 알 수 있겠다.
1. 성능
Java의 Seriailzation은 Reflection을 이용해 런타임에 객체 구조를 분석하고 처리해서 성능이 낮고 오버헤드가 발생한다
-> Kotlin Serialization은 컴파일 타임에 직렬화 코드를 생성해서 Reflection을 사용하는 것보다 성능이 좋고 런타임 오버헤드가 없다.
2. 플랫폼 종속성
Java의 Serialization은 JVM에 종속적이라 직렬화된 데이터는 다른 플랫폼에서 호환되지 않는다.
-> Kotlin Serialization은 Kotlin Multiplatform을 지원해서 JVM 외에 다른 플랫폼에서도 동일한 코드로 동작한다.
-> Kotlin Serialization은 다양한 포맷을 지원해서 다른 플랫폼에서도 사용 가능하다.
3. 데이터 포맷
Java의 Serialization은 바이너리 데이터 포맷만 지원한다.
-> Kotlin Serialization은 JSON 뿐만이 아니라 Protocol Buffers, CBOR 등 다양한 포맷을 지원하고 사용자 정의 포맷을 사용할 수 있다.
-> Kotlin Serialization은 JSON 포맷으로 직렬화/역직렬화 시 사람이 읽을 수 있는 데이터 포맷을 제공하기 때문에 디버깅과 로깅이 쉬워진다.
4. 그 외
Kotlin Serialization은 @Serializable을 이용해 컴파일 타입에 오류 체크를 해서 안정성을 높인다.
'빈 구멍 채우기' 카테고리의 다른 글
[Android][Test] TemporaryFolder (0) | 2025.01.20 |
---|---|
[삽질기록] Kotlinx Serialization에 접근할 수 없음 (0) | 2025.01.17 |
[모바일] OWASP Mobile Application Security (1) | 2025.01.03 |
[삽질기록][Android] Git 리모트에서 받아온 소스를 안드로이드 스튜디오에서 안드로이드 프로젝트로 읽지 못한다. (1) | 2024.11.30 |
[Android] Secrets Gradle Plugin for Android (1) | 2024.11.28 |