안녕하세요. 이번에는 Parcelable에 대해 알아보고 Parcelize를 사용하는 방법을 알아볼까 합니다.
오늘 알아볼 Serializable / Parcelable은 데이터들을 직렬화하여 관리하는 인터페이스입니다.
Serializable
원래 기존에는 Serializable 객체라는 것을 사용했습니다. Serializable은 자바의 표준 Interface입니다.
data class Test(
val a: String,
val b: Int,
val c: Boolean
) : Serializable
위와 같이 매우 간편 직렬화 인터페이스를 구현할 수 있습니다. 하지만 Serializable은 성능 저하를 불러일으킬 수 있다는 단점이 있습니다.
Parcelable
위의 Serializable의 단점 때문에 생겨난 것이 바로 Android SDK의 인터페이스인 Parcelable입니다.
data class Test(
val a: String?,
val b: Int?,
val c: Long?
) : Parcelable {
constructor(parcel: Parcel) : this(parcel.readString(), parcel.readInt(), parcel.readLong())
override fun describeContents() = 0
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(a)
parcel.writeInt(b ?: 0)
parcel.writeLong(c ?: 0L)
}
companion object CREATOR : Parcelable.Creator<Test> {
override fun createFromParcel(parcel: Parcel) = Test(parcel)
override fun newArray(size: Int) = arrayOfNulls<Test>(size)
}
}
writeToParcel은 데이터를 직렬화 하여 저장하기 위한 메서드 입니다.메서드입니다. 그리고 createFromParcel은 저장된 데이터를 역직렬화 하기 위해 사용되는 메서드입니다.
하지만 위의 Serializable과의 차이가 보이시나요? Serializable의 성능 저하는 개선되었지만 직렬화 객체 하나 생성하는데 코드 길이가 상당히 길어지게 되었습니다.
그래서 Serializable의 간결성을 가지고 Parcelable을 생성하기 위해 생겨난 것이 바로 Parcelize입니다. 그럼 이제 Parcelize의 사용법을 알아보겠습니다.
Parcelize
- build.gradle(Module: app)
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
// Parcelize
id 'kotlin-parcelize'
}
android {
...
}
dependencies {
...
}
build.gradle(Module: app)으로 가서 kotlin-parcelize를 plugins에 입력한 후 Sync를 해줍니다.
- Test.kt
@Parcelize
data class Test(
val a: String,
val b: Int,
val c: Boolean
) : Parcelable
plugins만 설정해주면 annotation을 추가하는 것으로 Serializable처럼 간편하게 Parcelable을 구현할 수 있습니다!
문제가 있거나 이해가 되지 않는 부분이 있으시면 댓글을 남겨주시면 답변드리겠습니다!
'Android > Libraries' 카테고리의 다른 글
[Android] 안드로이드 Permission(권한) 예제 - 연락처/주소록 만들기 (연락처 추가/수정) (0) | 2022.08.07 |
---|---|
[Android] 안드로이드 Permission(권한) 예제 - 연락처/주소록 만들기 (권한 획득, 연락처 불러오기) (0) | 2022.07.24 |
[Android] 안드로이드 Permission(권한) 종류 및 권한 획득 예제(지문인증 / 생체 인증) (0) | 2022.07.11 |
[Android] 안드로이드12 대응 SplashScreen(스플래시 스크린) 만들기 (1) | 2022.07.09 |
[Android] Glide를 사용하여 ImageView에 사진 불러오기 (0) | 2022.07.03 |