Android 개발/개념 & 기초

(1분 읽기) Parcelable이 뭐야? 🤔

안드하는잡스 2025. 2. 17. 16:52

안드로이드에서 객체를 빠르게 전달할 수 있도록 최적화된 직렬화 방식!
Serializable보다 속도가 최대 10배 이상 빠름! 🚀

 

✨ 예제:

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

data class User(
    val id: Int,
    val name: String
) : Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.readInt(),
        parcel.readString().orEmpty()
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeInt(id)
        parcel.writeString(name)
    }

    override fun describeContents(): Int = 0

    companion object CREATOR : Parcelable.Creator<User> {
        override fun createFromParcel(parcel: Parcel): User = User(parcel)
        override fun newArray(size: Int): Array<User?> = arrayOfNulls(size)
    }
}

객체를 효율적으로 변환해서 전달할 수 있음!


💡 어디에 사용할까?

① Intent로 객체 전달 🏃‍♂️📦

val user = User(1, "Elon Musk 🚀")
val intent = Intent(this, ProfileActivity::class.java)
intent.putExtra("userData", user) // Parcelable 객체 전달
startActivity(intent)

ProfileActivity에서 받을 때는?

val user = intent.getParcelableExtra<User>("userData")

빠르고 최적화된 데이터 전달 방식!


② RecyclerView와 ListAdapter에서 사용 ⚡🔄

class UserAdapter(private val users: List<User>) : RecyclerView.Adapter<UserViewHolder>() {
    override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
        val user: User = users[position]
        holder.bind(user)
    }
}

대량의 데이터를 다룰 때 Parcelable이 더 빠름!


③ Bundle을 통해 Fragment 간 데이터 전달 🔄

val bundle = Bundle().apply {
    putParcelable("user", user)
}
val fragment = ProfileFragment()
fragment.arguments = bundle

받을 때:

val user = arguments?.getParcelable<User>("user")

Fragment 간 객체 전달할 때도 OK!


⚡ Parcelable vs Serializable (뭐가 다를까?)

비교 항목 Serializable 🍏 Parcelable 🚀
속도 느림 (자동 변환) 빠름 (직접 구현)
사용 편의성 쉽고 간단 직접 코드 작성해야 함
목적 작은 데이터 전달 대량 데이터 최적화

 

🎯 결론!

  • Parcelable은 안드로이드에서 최적화된 데이터 전달 방식!
  • RecyclerView, ListAdapter, Intent, Bundle 등에서 빠르게 객체 전달 가능!
  • 대량 데이터는 Parcelable을 적극 사용하자!

🔥 안드로이드 앱 성능을 높이고 싶다면? Parcelable을 써봐! 🚀