본문 바로가기

빈 구멍 채우기

[Java][Kotlin] 자바의 직렬화 Serialization과 코틀린의 Kotlin Serialization

문제 파악

직렬화의 의미를 자바를 공부하면서 익혔기 때문에, 직렬화란 객체를 바이트 스트림으로 변환하는 것인 줄 알았다.

직렬화의 의미를 이렇게 알고 있었기 때문에 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)은 컴퓨터 과학의 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경

ko.wikipedia.org

직렬화(直列化) 또는 시리얼라이제이션(serialization)은 컴퓨터 과학의 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장(이를테면 파일이나 메모리 버퍼에서, 또는 네트워크 연결 링크 간 전송)하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정이다.

 

위키백과에서 나온 직렬화의 정의이다.

 

https://kotlinlang.org/docs/serialization.html

 

Serialization | Kotlin

 

kotlinlang.org

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 관련 글

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%A7%81%EB%A0%AC%ED%99%94Serializable-%EC%99%84%EB%B2%BD-%EB%A7%88%EC%8A%A4%ED%84%B0%ED%95%98%EA%B8%B0

 

☕ 자바 직렬화(Serializable) - 완벽 마스터하기

자바의 직렬화 & 역직렬화 직렬화(serialize)란 자바 언어에서 사용되는 Object 또는 Data를 다른 컴퓨터의 자바 시스템에서도 사용 할수 있도록 바이트 스트림(stream of bytes) 형태로 연속전인(serial) 데

inpa.tistory.com

 

Kotlin Serailization

https://kotlinlang.org/docs/serialization.html

 

Serialization | Kotlin

 

kotlinlang.org

 

https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/serialization-guide.md

 

kotlinx.serialization/docs/serialization-guide.md at master · Kotlin/kotlinx.serialization

Kotlin multiplatform / multi-format serialization - Kotlin/kotlinx.serialization

github.com

 

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을 이용해 컴파일 타입에 오류 체크를 해서 안정성을 높인다.