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을 써봐! 🚀