안드로이드에서 복잡한 클래스의 객체(POJO)들을 전달하게 될때 Serializable 또는 Parcelable 을 사용하여 직렬화를 한 후에 Intent에 추가 하는 방법을 사용합니다.
java.io.Serializable
import java.io.Serializable
public class MySerializable import Serializable
{
private String mData;
public String getMData() {
return mData;
}
public void setMData (String mData) {
this.mData = mData;
}
@Override
public String toString() {
return String.format("Member{name='%d'}", mData);
}
}
android.os.Paraclable
writeToParcel()
: Parcel에서 데이터 복원createFromParcel()
: Parcel에 데이터 저장public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
// 객체가 보내지기 전에 데이터를 직렬화 시켜준다
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
// 객체를 받았을때 직렬화를 풀어주는 로직을 작성한다
// Parcelable 을 이용하여 보내게 되면 받는 쪽에서도 Parcelabele을 통해서 데이터를 받는다
// 이때 생성자를 통해 Parcelable 을 전달하여 Parcel 형이 들어오는 생성자를 만든다
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
Serializable
은 시스템 비용이 들며 Paraclable
은 사용자가 필수적으로 작성해야 하는 코드들이 존재합니다. 다만 Serializable
도 writeObject()
와 readObject()
를 따로 구현하면 속도가 개선되어 Paraclable 보다도 속도가 빨라질 수 있다고 합니다.
안드로이드에서는 @Parcelize
Annotation을 선언하여 사용하면 data class들을 쉽게 직렬화 하는 것을 권장하고 있습니다. Reference에 Android Developer 를 참고 하면 됩니다.