📝요약
Parcelable과 Serializable은 데이터를 직렬화하기 위한 인터페이스입니다. Serializable은 Java 표준 인터페이스로, 사용하기엔 간편하지만 내부적으로 Reflection을 사용하여 속도가 느린 단점이 있습니다. Parcelable은 Android SDK 인터페이스로, Serializable보다 속소가 빠르지만, 직렬화 방법을 개발자가 명시적으로 작성해야하는 단점이 있습니다.
추가로, 코틀린은 Parcelable 구현을 자동 생성하는 Parcelize 플러그인을 제공합니다.
📌참고자료
마커 인터페이스(Marker Interface)
Reflection
을 사용하기 때문Reflection
은 프로세스 동작 중 많은 추가 객체 생성 → GC 오버헤드 발생data class Person(
val username: String,
val thumbnail: String
) : Serializable
Reflection
을 사용하지 않도록 설계됨import android.os.Parcel;
import android.os.Parcelable;
public class Person implements Parcelable {
private String firstName;
private String lastName;
private int age;
public Person(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.firstName);
dest.writeString(this.lastName);
dest.writeInt(this.age);
}
protected Person(Parcel in) {
this.firstName = in.readString();
this.lastName = in.readString();
this.age = in.readInt();
}
public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
@Override
public Person createFromParcel(Parcel source) {
return new Person(source);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
}
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
... androidExtensions { experimental = true }
}
@Parcelize
data class User(
val username: String,
val thumbnail: String,
val age: Int
) : Parcelable