프로젝트를 진행하는데 문득 내가 Serializable 은 많이 사용했지만 Parcelable 은 사용해보지 않았다는 것을 깨달았다
그래서 차이점을 공부해보려고 포스팅을 해본다!
이 두가지는 직렬화/역직렬화, 마샬링/언마샬링 이라고도 불린다
Serializable
- Java의 표준 인터페이스
- 구현이 간편
- Parcelable보다 속도가 느림
- 리플랙션이라는 기술을 사용기 때문
- 리플렉션이란 런타임에 프로그램의 클래스를 조사하기 위해서 사용되는 기술.
- 즉, 프로그램이 실행중일 때 인스턴스 등을 통해 객체의 내부 구조 등을 파악
data class Person(
var age: Int,
var name: String,
val birthday: String
) : Serializable
Parcelable
- Java가 아닌 Android SDK의 인터페이스
- Serializable보다 빠르고 Android에서 사용하기를 권장
- reflection을 사용하지 않고 직렬화/역직렬화를 하는 과정을 개발자가 모두 구현
- 현재는 코틀린에서 Annotation 제공하여 구현하기 쉽게 변경되었다..!
//build.gradle
plugins {
id "kotlin-parcelize"
}
@Parcelize
data class Person(
var age: Int,
var name: String,
val birthday: String
) : Parcelable
@Parcelize가 지원하는 타입
- 원시타입 그리고 원시타입의 박스타입 지원
- Object와 enum 지원
- String, CharSequence 지원
- Exception 지원
- Size, SizeF, Bundle, IBinder, IInterface, FileDescriptor 지원
- SparseArray, SparseIntArray, SparseLongArray, SparseBooleanArray 지원
- 모든 Serializable(Date 포함) 그리고 Parcelable 구현체들 지원
- 모든 타입의 Collection 지원
List는 ArrayList로 매핑, Set은 LinkedHashSet으로 매핑, Map은 LinkedHashMap으로 매핑 - 모든 타입의 배열 지원
- 지원하는 모든 타입의 Nullable 버전 지원
참고
https://www.charlezz.com/?p=44613
https://developer.android.com/kotlin/parcelize?hl=ko
엥? Parcelize 열심히 써봐야겠네...? Serializable 안녕~~🖐
반응형
'개발 > Kotlin' 카테고리의 다른 글
[Kotlin] Data class 와 copy() (0) | 2022.08.03 |
---|---|
[Kotlin] lateinit vs by lazy (0) | 2022.07.30 |
[Kotlin] Scope Function (0) | 2022.07.27 |
[Kotlin] 코틀린이란? (0) | 2022.07.25 |
댓글