본문 바로가기

안드로이드

Android - Parcelable 정리

 

Parcelable은 안드로이드에서 객체를 직렬화하는데 사용되는 인터페이스라고 이해하면 될 것 같다. 여기서 Java의 Serialization과 다른점은 Parcelable은 Reflection 구현 대신 직렬화에 대한 처리를 명시적으로 한다.

 

마셜링은 프로세스간 또는 스레드 간 데이터 전송에 필요한 원격 프로시저 호출(remote procedure call, RPC) 매커니즘의 구현에 사용된다. 

 

Parcelable은 아래의 경우에 사용된다.

1. IPC 통신

2. Intent로 컴포넌트간 데이터 전달

 

먼저 IPC 통신은 프로세스간의 데이터 전송을 의미하며, AIDL을 활용 시 원시타입이 아닌 참조타입을 전달할 경우 Parcelable 객체로 전달해야 한다.

 

구현은 Parcelable 인터페이스를 구현하여 선언한 클래스를 생성하면 된다.

 

예제 코드는 아래와 같다.

import android.os.Parcel
import android.os.Parcelable

class Rect() : Parcelable {
    var left: Int = 0
    var top: Int = 0
    var right: Int = 0
    var bottom: Int = 0

    companion object CREATOR : Parcelable.Creator<Rect> {
        override fun createFromParcel(parcel: Parcel): Rect {
            return Rect(parcel)
        }

        override fun newArray(size: Int): Array<Rect> {
            return Array(size) { Rect() }
        }
    }

    private constructor(inParcel: Parcel) : this() {
        readFromParcel(inParcel)
    }

    override fun writeToParcel(outParcel: Parcel, flags: Int) {
        outParcel.writeInt(left)
        outParcel.writeInt(top)
        outParcel.writeInt(right)
        outParcel.writeInt(bottom)
    }

    private fun readFromParcel(inParcel: Parcel) {
        left = inParcel.readInt()
        top = inParcel.readInt()
        right = inParcel.readInt()
        bottom = inParcel.readInt()
    }

    override fun describeContents(): Int {
        return 0
    }
}

 

참고링크:

https://developer.android.com/reference/android/os/Parcelable

 

Parcelable  |  Android 개발자  |  Android Developers

Known indirect subclasses AbsSavedState, AbsoluteSizeSpan, AccessibilityEvent, AccessibilityGestureEvent, AccessibilityNodeInfo, AccessibilityNodeInfo.AccessibilityAction, AccessibilityNodeInfo.TouchDelegateInfo, AccessibilityServiceInfo, AccessibilityWind

developer.android.com

https://developer.android.com/reference/android/os/Parcel

 

Parcel  |  Android 개발자  |  Android Developers

Parcel public final class Parcel extends Object java.lang.Object    ↳ android.os.Parcel Container for a message (data and object references) that can be sent through an IBinder. A Parcel can contain both flattened data that will be unflattened on the other

developer.android.com

https://ko.wikipedia.org/wiki/%EB%A7%88%EC%83%AC%EB%A7%81_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)

 

마샬링 (컴퓨터 과학) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 컴퓨터 과학에서 마셜링(marshalling, l을 하나만 사용하여 marshaling이라고도 표기)이란 한 객체의 메모리에서 표현방식을 저장 또는 전송에 적합한 다른 데이터 형식으로 변환하는 과정이다. 또한 이는 데이터를 컴퓨터 프로그램의 서로 다른 부분 간에 혹은 한 프로그램에서 다른 프로그램으로 이동해야 할 때도 사용된다. 마셜링은 직렬화(serialization)와 유사하며 한 오브젝트, 여기서는 직렬화 된 오브젝

ko.wikipedia.org