Parcelable
앱을 만들다 보면 인텐트를 통해 단순히 기본형 타입의 데이터뿐만아니라, 오브젝트를 다른 컴포넌트에 넘겨줘야할 경우가 많다. 그 경우 단순히 그냥 인텐트에 putExtra()로는 넣어 줄 수가 없다. 안드로이드에서는 그런 경우를 위해 자바의 Serialization 개념과 유사한 Parcelable이라는 클래스가 있다.
위와 같은 Book클래스를 인텐트로 넘겨주려고 하는데, 이대로 사용할 수는 없다.
오브젝트를 Parcelable 클래스로 만들어주려면 android.os.Parcelable 인터페이스를 구현해야 한다.그러므로 아래와 같이 클래스 정의를 변경한다.
그리고 Parcelable 인터페이스에 있는 2개의 메소드를 오버라이드 해 줘야만 한다.
describeContents() - Parcelable 하려는 오브젝트의 종류를 정의한다.
writeToParcel(Parcel desc,int flags) - 실제 오브젝트 serialization / flattening을 하는 메소드, 오브젝트의 각 멤버변수를 parcel해줘야한다.
다음으로 해야 할 일은 Parcel에서 데이터를 un-marshal / de-serialize하는 단계를 추가해야 한다. 그러기 위해서 Parcelable.Creator 타입의 CREATOR라는 변수를 정의해야 한다. 이 변수를 정의하지 않으면 안드로이드는 다음과 같은 익셉션을 발생한다.
Parcelable protocol requires a Parcelable.Creator object called CREATOR
Book.java 에 모든 parcel된 데이터를 복구하는 생성자를 정의해 줘야만 한다.
주의할 것은 writeToParcel() 메소드에서 기록한 순서와 동일하게 복구해야만 한다.
전체코드는 다음과 같다.
'웹 개발 > 안드로이드' 카테고리의 다른 글
가변 비트레이트 스트리밍(Adaptive Bitrate Streaming) (0) | 2017.04.11 |
---|---|
GCM( Google Cloud Messaging ) 이란? (0) | 2017.04.10 |
Intent (0) | 2017.03.18 |
SurfaceView 와 SurfaceHolder (0) | 2017.03.14 |
ANR(Application Not Responding) (0) | 2017.03.14 |