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를 선택 할 수 밖에 없다

는게 포인트