티스토리 뷰

Android

객체 직렬화 - Serializable

parkho79 2020. 2. 28. 10:32
728x90



Android 에서는 activity 간 데이터를 전달하기 위해 인텐트에 데이터를 추가한다.

전달할 데이터가 class 인 경우 Serializable or Parcelable 을 사용하거나 Bundle 을 이용해 객체 직렬화를 해야한다.

이번 포스팅에서는 객체 직렬화에 대해 알아보자.



직렬화 & 역직렬화

◼ 직렬화 (Serialize)

자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술.

JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술

 

◼ 역직렬화 (Deseialize)

Byte 로 변환된 data를 원래대로 object 나 data로 변환하는 기술.

직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM 으로 상주시키는 형태.

 



Why?

각기 다른 process 들은 서로 데이터를 주고 받을 수 없다. 

(메모리를 공유할 수 없다.)

 

다른 process 에 데이터를 전달하기 위해 IPC (Inter Process Communication) 를 사용한다.

IPC 는 byte stream 전송이 가능하므로 직렬화가 필요하다.

 



Serializable

Serializable 은 Android SDK 가 아닌 JAVA interface 로 해당 class 가 직렬화 대상이라고 알려주는 marker interface 이다.

(Serializable 은 reflection 을 사용하여 직렬화를 처리함으로 성능저하가 발생할 수 있다.)

 

직렬화의 방법은 "implements Serializable" 를 상속만 하면 된다.

상속만 받으면 자동으로 직렬화가 처리된다.

 

단, 하단과 같은 조건은 만족해야 한다.

- 직렬화 class 는 송신, 수신 모두 동일해야 한다.

- 직렬화 class 의 패키지 명이 같아야 한다.

- serialVersionUID 가 같아야 한다.

 

 

◼ 직렬화 class (송수신 공통)



◼ 송신부



◼ 수신부



Source code

◼ 송신부

https://github.com/parkho79/SerializeSender

 

◼ 수신부

https://github.com/parkho79/SerializeReceiver



728x90

'Android' 카테고리의 다른 글

객체 직렬화 - Bundle  (0) 2020.03.19
객체 직렬화 - Parcelable  (0) 2020.03.04
TextView 글자크기를 동적으로 변경하기  (0) 2020.02.21
AndroidX  (0) 2020.02.12
Gradle 로 여러가지 버전 생성하기  (2) 2020.02.10
댓글