Parcelize vs Serializable 차이점 한눈에 보기
2025. 4. 2. 20:22ㆍAndroid/Android 기초
728x90
반응형
Serializable : Java의 기본 직렬화 방식
class User(val name: String, val age: Int) : Serializable
장점:
- 구현이 매우 쉽다. implements Serializable만 하면 끝.
- Java 표준이라 Android 외의 환경에서도 사용 가능.
단점:
- 리플렉션 기반 → 느리다.
- 성능이 중요한 Android 환경에선 이게 큰 단점.
- 어떤 필드가 직렬화되고 있는지 명시적으로 제어 불가.
Parcelable (+ @Parcelize) : Android 전용 직렬화 방식
@Parcelize
data class User(val name: String, val age: Int) : Parcelable
장점:
- Android에 최적화된 고속 직렬화.
- 메모리 복사 수준으로 빨라서 성능이 훨씬 좋다.
- @Parcelize 덕분에 코드도 이제는 매우 간단해짐.
- 필요한 경우 직렬화 대상 필드를 제어할 수 있음 (@IgnoredOnParcel 등)
단점:
- Android 전용이다. (멀티플랫폼에서는 X)
- 수동 구현할 경우 (CREATOR, writeToParcel) 굉장히 귀찮다.
- 복잡한 객체(예: nested List, Map 등)의 직렬화는 제한적.
항목 | Serializable | Parcelize |
방식 | Java 기본 제공 | Android 전용 방식 |
속도 | 느림 (리플렉션 기반) | 빠름 (직접 메모리 복사) |
작성 편의성 | 매우 쉬움 (구현만 하면 끝) | @Parcelize + Parcelable 필요 |
커스텀 유연성 | 낮음 | 높음 (필드 단위 제어 가능) |
사용 추천 | 테스트/POJO 전송 | 안드로이드 컴포넌트 간 데이터 전달 (ex. Intent) |
Serializable은 편하긴 한데 느리고,
Parcelize는 빠르고 유연하지만 Android 전용이다.
728x90
반응형
'Android > Android 기초' 카테고리의 다른 글
Single Activity Architecture(SAA) 전환 시 Navigation 구조 설계 방법 (0) | 2025.03.28 |
---|---|
[Android] 왜 Log.d() 대신 Timber를 써야 할까? (0) | 2025.03.26 |
android:exported 속성 필수 이유 (Android 12 대응) (0) | 2025.03.24 |
좀비 같은 Activity 처리하기, finish()와 finishAActivity()의 차이 (0) | 2025.03.10 |
안드로이드 모듈 간 리소스 충돌 방지: 리소스 ID와 모듈 의존성 (0) | 2025.03.05 |