public interface Serializable {}
Java Serialization(직렬화)
자바 내부에서 사용하는 객체나 데이터를 외부 자바시스템에서 사용할 수 있도록
바이트 스트림
형태로 만드는 것을 의미한다.
프로그램에서 사용되는 데이터들은 연속적으로 위치해 있지 않고 내부적으로 포인터에 의해 참조되고 있기 때문에 흩어진 데이터를 한 곳에 모아 일련의 바이트 형태로 보내야한다.
Byte Stream
데이터를 Byte 단위로 주고받는 것.
-Serializable
은 내부에서 Reflection
을 사용해서 직렬화 처리를 하는데 처리 과정 중에 많은 추가 객체를 생성한다. 이 쓰레기들은 Garbage Collector
의 타겟이 되고 Garbage Collector
의 과도한 동작으로 성능 저하 및 배터리 소모가 발생한다.
안드로이드 SDK의 인터페이스로 Reflection
을 사용하지 않게 설계되어 있다. Serializable
과 달리 직렬화 처리 방법을 사용자가 명시적으로 작성하기 때문에 자동으로 처리하기 위한 Reflection
이 필요없다.
Parcelable
을 직접 구현하는 건 보일러 플레이트 코드가 생기게 된다.
그래서 kotlin-parcelize plugin
을 사용해 Parcelable
구현을 자동으로 처리한다.
plugins {
id 'kotlin-parcelize'
}
@Parcelize
data class Person(
val name: String,
val age: Int
): Parcelable