CodeKata
팀 프로젝트
1. Serializable vs Parcelable
객체를 다른 Activity로 전달하기 위해 직렬화, 역직렬화 작업을 간단히 사용하게 할 수 있어서 사용했다.
Serializable 설명
Serializable은 Java에서 제공하는 표준 인터페이스이다. Serializable을 구현한 클래스는 직렬화 대상이 된다.
장점
사용하기 편하다. 따로 구현할 코드가 없다.
단점
Reflection을 사용하기 때문에 느리고 메모리를 많이 쓴다.
예시코드
data class Person(
val username: String,
val thumbnail: String
) : Serializable
Parcelable설명
안드로이드 SDK에서 제공하는 인터페이스이다. 이것을 구현한 클래스의 객체는 직렬화 가능하다.
Parcelable은 Reflection이 런타임에 하는 작업을 개발자가 대신 한다. 개발자가 직접 직렬화/역직렬화 하는 로직을 작성해야 한다.
장점
Serializable에 비해 빠르고 리소스를 덜 소모한다.
Reflection 과정 없이 미리 작성된 로직을 바탕을 빠르게 직렬화/역직렬화 할 수 있다.
단점
직접 작성해야 하는 코드가 많다.
예시코드
data class User(
var username: String?,
var thumbnail: String?,
var age: Int?
) : Parcelable {
constructor(parcel: Parcel) {
parcel.run {
username = readString()
}
}
override fun writeToParcel(dest: Parcel?, flags: Int) {
dest?.writeString(username)
dest?.writeString(thumbnail)
dest?.writeInt(age ?: 0)
}
override fun describeContents(): Int = 0
companion object CREATOR : Parcelable.Creator<User> {
override fun createFromParcel(parcel: Parcel): User {
return User(parcel)
}
override fun newArray(size: Int): Array<User?> {
return arrayOfNulls(size)
}
}
}
차이점
코드를 보고 느꼈겠지만 코드 양부터 차이가 난다.
둘의 큰 차이점으로는 편리함과 속도이다.
Pacelable이 속도가 더 빠르지만 구현, 유지 비용이 Serializable에 비해 많이 소요된다.
Serializable이 상대적으로 속도가 느린 이유는 자바의 Reflection을 사용하기 때문이다.
Reflection을 프로세스 동작 중에 많ㅇ느 추가 객첻르을 생성한다. 추가 객체 생성 후에 나온 쓰레기들은 가비지 컬렉터의 타겟이 되고 과도한 동작으로 오버헤드가 발생한다.
🌟 하지만
Kotlin에서는 대안이 있다.
implementation
plugins {
...
id("kotlin-parcelize")
}
@Parcelize를 사용하면 된다.
@Parcelize
data class User(
val username: String,
val thumbnail: String,
val age: Int
) : Parcelable
문제-해결
어제의 문제점 해결
1. Scroll안에 listView를 배치했었는데 문제점과 사용을 권장하지 않는다하여 따로 배치로 해결하였다.
2. 위에 Parcelize를 사용하여 문제 해결
'Kotlin > TIL' 카테고리의 다른 글
TIL (04.09) (0) | 2024.04.09 |
---|---|
TIL (04.08) (0) | 2024.04.08 |
TIL (04.04) (0) | 2024.04.04 |
TIL (04.03) (0) | 2024.04.03 |
TIL (04.02) (1) | 2024.04.02 |