본문 바로가기
Java/AndroidStudio

Android - Serializable과 Parcelable

by 하니__ 2024. 6. 12.

 

 

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

는게 포인트