Java/AndroidStudio
Android - Serializable과 Parcelable
하니__
2024. 6. 12. 17:42
Intent로 객체를 직렬화하여 이동해야할때 Serializable을 사용하는데
같은 용도로 Parcelable도 사용된다
어떤 차이가 있을까
Serializable
우선 Serializable는 Java의 표준 라이브러리의 일부
자동으로 객체가 직렬화 가능해진다
public class MyObject implements Serializable {
private int id;
private String name;
위와 같은 방식으로
클래스에 임플리먼츠하여 사용하면 된다
장점
간단하게 사용가능
모든 자바 객체에서 사용가능
단점
상대적으로 느린 속도, 높은 메모리사용량
직렬화된 객체가 예상보다 클 수 있음
직렬화 버전 관리위해 serialVersionUID 정의해야할 때가 있음
Parcelable
위와 다르게 안드로이드에서 사용되기 위해 설계된 방식
Android의 Binder 메커니즘과 함께 사용
public class MyObject implements Parcelable {
private int id;
private String name;
protected MyObject(Parcel in) {
id = in.readInt();
name = in.readString();
}
public static final Creator<MyObject> CREATOR = new Creator<MyObject>() {
@Override
public MyObject createFromParcel(Parcel in) {
return new MyObject(in);
}
@Override
public MyObject[] newArray(int size) {
return new MyObject[size];
}
};
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(name);
}
@Override
public int describeContents() {
return 0;
}
}
Serializable때 처럼 클래스에 임플리먼츠를 한 후
위와 같은 작업이 필요
장점
상대적으로 좋은 성능, 더 빠르고 적은 메모리 사용량
안드로이드 시스템에 최적화
단점
구현이 복잡, 코드가 많아짐
자바 표준라이브러리가 아니기에
안드로이드에서만 사용가능
안드로이드에서만 사용한다면
Parcelable 쪽이
입력해야할것은 많지만
확실히 사용에 용이하고,
범용성으로는 Serializable를 선택 할 수 밖에 없다
는게 포인트