ckgod.github Help

Details: Parcel and Parcelable

Pacel 과 Parcelable

Parcel과 Parcelable의 개념과 역할

ParcelParcelable은 안드로이드의 고성능 프로세스 간 통신(IPC)을 위해 설계된 핵심 요소이다.

Parcel: 고성능 IPC를 위한 데이터 컨테이너

Parcel은 프로세스 간 통신(IPC) 메커니즘을 통해 전송될 데이터를 담는 컨테이너 클래스이다. 이것의 주된 목적은 데이터를 마샬링(Marshalling) 및 **언마샬링(Unmarshalling)**하여 안드로이드의 IPC 경계를 넘어 전달할 수 있도록 하는 것이다.

  • 마샬링(Marshalling): 객체 또는 데이터를 전송 가능한 형태(일련의 바이트 스트림)로 변환하는 과정. '평탄화'라고도 한다.

  • 언마샬링(Unmarshalling): 마샬링된 데이터를 다시 원래의 객체 구조로 복원하는 과정.

Parcel은 고성능 IPC 전송을 위해 특별히 설계되었으며, 기본 데이터 타입, 배열, 그리고 Parcelable 인터페이스를 구현한 객체 등을 담을 수 있다.

Parcelable: 객체의 직렬화 규약

Parcelable은 객체가 스스로의 상태를 Parcel에 쓰고, 다시 Parcel로부터 복원하는 방법을 정의하는 안드로이드 전용 인터페이스이다.

객체가 Parcelable 인터페이스를 구현한다는 것은, 해당 객체가 안드로이드 컴포넌트 간에 효율적으로 전달될 수 있는 '직렬화 규약'을 따름을 의미한다. 이는 자바의 표준 Serializable 인터페이스보다 안드로이드 환경에서 훨씬 더 빠른 성능을 보인다.

주요 특징 및 제약사항

  • 고성능: Parcelable은 리플렉션(reflection)을 사용하지 않으므로, 리플렉션 기반의 Serializable보다 월등히 빠르다.

  • 최적화: Parcelable을 처리할 때, Parcel은 클래스 정보와 같은 메타데이터를 생략하여 처리 효율을 높인다. 이 때문에 데이터를 읽는 쪽에서는 어떤 타입의 객체가 올 것인지 미리 알고 있어야 한다.

  • 비영구성: Parcel의 내부 구현은 안드로이드 버전에 따라 변경될 수 있다. 따라서 영구 저장소(DB, 파일 등)에 데이터를 저장하는 용도로 Parcel을 사용해서는 안 된다. 오직 임시적인 데이터 전송 용도로만 사용해야 한다.

요약

  • Parcel은 고성능 IPC를 위한 데이터 컨테이너이다.

  • Parcelable은 객체가 Parcel에 자신을 쓰고 복원하는 방법을 정의하는 인터페이스이다.

  • Parcelable을 구현한 객체를 Parcel에 담아 안드로이드 컴포넌트 간에 데이터를 효율적으로 전달한다.

30 September 2025