직렬화(Serialization)

직렬화(Serialization)

직렬화는 애플리케이션이 사용하는 데이터를 네트워크로 전송하거나 데이터베이스·파일에 저장할 수 있는 형식으로 변환하는 과정이에요. 역직렬화(deserialization)는 외부 데이터를 다시 런타임 객체로 되돌리는 반대 과정이죠. 이 둘은 제3자와 데이터를 주고받는 대부분의 애플리케이션에서 필수적이에요.

출처: Serialization

본문

JSON이나 Protocol Buffers 같은 일부 직렬화 형식은 특히 흔히 쓰여요. 이 형식들은 언어 중립적이고 플랫폼 중립적이라서, 어떤 현대 언어로 작성된 시스템 간에도 데이터를 교환할 수 있어요. Kotlin은 이런 기능을 kotlinx.serialization 라이브러리를 통해 제공하는데, 여러 플랫폼과 데이터 형식을 지원해요.

Kotlin의 직렬화가 처음이라면 직렬화 시작하기(Get Started with Serialization) 튜토리얼부터 시작하는 걸 권해요. 이 튜토리얼은 Kotlin 직렬화 라이브러리를 프로젝트에 추가하는 방법부터 첫 번째 클래스를 직렬화·역직렬화하는 방법까지 안내해 주거든요.

[IMAGE: Get started with serialization]

Kotlin 직렬화 라이브러리

Kotlin 직렬화는 JVM, JavaScript, Native를 포함한 모든 플랫폼을 지원해요. 대상 플랫폼에 관계없이 동일한 의존성 선언을 사용하면 돼요.

Kotlin 직렬화는 JSON, CBOR, Protocol Buffers 같은 다양한 직렬화 형식을 서로 다른 직렬화 형식 라이브러리를 통해 지원해요. 이 라이브러리들은 핵심 kotlinx.serialization 라이브러리를 기반으로 만들어지죠. 지원되는 직렬화 형식의 전체 목록은 지원되는 직렬화 형식을 참고해요.

모든 Kotlin 직렬화 형식 라이브러리는 org.jetbrains.kotlinx: 그룹에 속하며, 이름이 kotlinx-serialization-로 시작하고 그 뒤에 직렬화 형식을 나타내는 접미사가 붙어요. 예를 들면:

  • org.jetbrains.kotlinx:kotlinx-serialization-json은 JSON 직렬화를 제공해요.
  • org.jetbrains.kotlinx:kotlinx-serialization-cbor은 CBOR 직렬화를 제공해요.

kotlinx.serialization 라이브러리는 Kotlin과는 독립적인 자체 버전 체계를 따르는답니다. 최신 릴리스 버전은 GitHub에서 찾을 수 있어요.

특정 형식 라이브러리를 사용하지 않을 때, 예를 들어 직접 직렬화 형식을 작성할 때는 kotlinx-serialization-core 라이브러리를 의존성으로 사용해요.

지원되는 직렬화 형식

kotlinx.serialization은 다양한 형식을 위한 직렬화 형식 라이브러리를 포함하고 있어요:

형식 아티팩트 ID 플랫폼 상태
JSON kotlinx-serialization-json 모든 지원 플랫폼 Stable
HOCON kotlinx-serialization-hocon JVM 전용 Experimental
Protocol Buffers kotlinx-serialization-protobuf 모든 지원 플랫폼 Experimental
CBOR kotlinx-serialization-cbor 모든 지원 플랫폼 Experimental
Properties kotlinx-serialization-properties 모든 지원 플랫폼 Experimental

JSON 직렬화 라이브러리(kotlinx-serialization-json)를 제외한 모든 직렬화 형식 라이브러리는 Experimental 상태예요. 이들의 API는 언제든 바뀔 수 있어요. JSON 직렬화에 대한 자세한 내용은 JSON 직렬화 개요를 확인해요.

YAML이나 Apache Avro처럼 더 많은 직렬화 형식을 지원하는 커뮤니티 유지보수 라이브러리도 있어요.

실험적 직렬화 형식에 대해 더 알고 싶다면 대안 및 사용자 지정 형식(Alternative and custom formats)을 참고해요.

지원되는 직렬화 유형

Kotlin 직렬화는 다양한 내장 유형을 지원해요. 모든 원시 유형과 List 같은 Kotlin 표준 라이브러리의 대부분의 복합 유형을 포함하죠. 자세한 내용은 내장 유형 직렬화(Serialize built-in types)를 확인해요.

또한 @Serializable로 주석 처리된 클래스는 직렬화가 완전히 지원되어, 클래스 인스턴스를 JSON 같은 형식으로 변환하거나 그 반대로 변환할 수 있어요. 자세한 내용은 클래스 직렬화(Serialize classes)를 참고해요.

다음 단계

더 알아보기