Parcelable과 Serializable 비교
https://www.charlezz.com/?p=823
Parcelable vs Serializable
종종 앱을 개발하다보면 액티비티와 같은 안드로이드 컴포넌트에 POJO같은 데이터를 전달해야 할 일이 있습니다. 액티비티 객체는 우리가 만들지 않고 안드로이드 시스템에서 관리하고 있으므로 컴포넌트로 데이터를 전달하기 위해서는 반드시 인텐트를 통해서 전달하게 됩니다.
Parcelable을 자동으로 구현해주는 @Parcelize에 대해 알아보자.
https://www.charlezz.com/?p=44613
kotlin-parcelize 플러그인은 Parcelable 구현을 자동으로 해준다.
새로운 클래스를 생성도 필요 없고 @Parcelize 어노테이션을 추가하는 것만으로 직접 Parcelable 관련 코드를 작성 한 것과 같이 동작한다. 컴파일타임에 바이트 코드 변조를 하기 때문에 추가되는 메서드 및 런타임시 오버헤드 비용도 발생하지 않는다.
[Bundle] Android Parcel과 Parcelable 알아보기 + kotlin-parcelize plugin 활용하기
https://kotlinworld.com/44
Parcel이란?
Parcel은 한국어로 '꾸러미'라는 뜻이다. 짐을 싸듯이 객체를 싸는 클래스가 바로 parcel 클래스이다.
parcel 클래스는 직렬화시 container 역할을 하는 클래스로 말 그대로 꾸러미이다.
parcel이 필요한 이유
안드로이드에서는 프로세스간 통신(IPC)를 위해 bundle 클래스를 사용하는데, 이러한 bundle class는 map으로 key와 value가 있는 형태의 클래스이다. 이러한 bundle에서 int나 stirng같은 간단한 데이터는 그대로 value 값으로 넣을 수 있지만, java의 POJO나 Beans 혹은 kotlin의 data class와 같은 것들은 내부에 많은 데이터가 들어 있기 때문에 map에 value로 입력하는 것이 어렵다.
이러한 문제점을 개선하여 bundle에 value값으로 입력될 수 있는 것이 바로 parcel이다.
parcelable 이란?
parcelable interface는 parcel(꾸러미)을 만들고 비직렬화(풀어주기)하기 위한 인터페이스이다. parcelable 객체는 parcel로 만들고 풀 수 있다. parcelable을 이용하게 되면 serializable과 다르게 리플랙션을 사용하지 않고, 필요한 부분만을 직렬화하고 비직렬화 할 수 있도록 만들 수 있어 효율성을 향상시킬 수 있다.