hong's android

[안드로이드] Serializable과 Parcelable 본문

Android/Android

[안드로이드] Serializable과 Parcelable

_hong 2023. 1. 9. 08:07

Serializable(직렬화)란?

 

서로 다른 메모리 공간을 가지고 있는 시스템은 같은 객체를 참조할 수 없다. 그렇기 때문에 객체 내용을 직렬화된 바이트 코드로 변환해서 객체 값을 주고받을 수 있게 한다.

 

Serializable(직렬화) 하는 이유

 

객체의 영속성을 위해서, jvm 상에 있는 객체 정보는 프로그램이 종료되면 사라진다. 네트워크로 객체의 값을 보내야 한다.

 

자바는 Serializable 인터페이스를 구현해야 직렬화가 가능한데, 이 Serializable 인터페이스는 기능들이 들어있지 않은 마크 인터페이스다.

 

 

Serializable과 Parcelable

 

Serializable은 Java.io 패키지에 속한 인터페이스, parcelable은 안드로이드 sdk에 포함된 인터페이스이다. 

Serializable은 내부적으로 리플렉션 Api를 사용하고 그 과정에서 불필요한 객체들을 많이 사용한다. 또한 그 불필요한 객체들은 gc의 대상이 되고 불필요한 GC로 성능이 저하된다.

반면, parcelable은 사용하지 않는데 따로 구현을 해주는 부분이 추가되었고 이로 인해 개발자는 작성해야할 코드가 늘어난다. 

 

*리플렉션 : 해당 객체 타입을 몰라도 동적으로 클래스 정보를 알수 있게 해 주는 것. 어떤 객체를 직렬화하려면 해당 객체의 필드 정보에 접근해야 한다. Reflection API에는 객체의 필드에 접근할 수 있도록 도와주는 메서드를 제공한다. 메서드 영역의 클래스 정보를 가져온다.

 

Serializable에서 자동으로 처리되는 부분들을 writeObject(), readObject()로 처리 가능하다.  두 메소드를 추가 구현하면 성능 향상을 기대할 수 있다.

 

 

Parcelable을 안드로이드에서 사용하는 경우

 

컴포넌트 간 객체를 주고받아야 할 때

 

 

 

 

 

Reference.

https://medium.com/@limgyumin/parcelable-vs-serializable- 정말-serializable은-느릴까-bc2 b9 a7 ba810