Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- android retrofit login
- 안드로이드 라이선스 종류
- 안드로이드 라이선스
- 스택 자바 코드
- 플러터 설치 2022
- 객체
- 큐 자바 코드
- 안드로이드 레트로핏 crud
- 안드로이드 레트로핏 사용법
- Rxjava Observable
- rxjava hot observable
- 안드로이드 유닛테스트란
- 클래스
- 서비스 vs 쓰레드
- 2022 플러터 설치
- rxjava disposable
- 안드로이드 유닛 테스트 예시
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 유닛 테스트
- rxjava cold observable
- ar vr 차이
- 서비스 쓰레드 차이
- jvm 작동 원리
- 안드로이드 os 구조
- 스택 큐 차이
- 자바 다형성
- jvm이란
- android ar 개발
- ANR이란
- 멤버변수
Archives
- Today
- Total
나만을 위한 블로그
[Manifest-Android] 3. 직렬화 / 역직렬화 본문
728x90
반응형
둘 다 서로 다른 컴포넌트(액티비티, 프래그먼트) 간에 데이터 전달 시 쓰지만 성능, 구현 면에서 다르게 작동한다.
Serializable
- 자바 표준 인터페이스 : 객체를 바이트 스트림으로 바꿔 액티비티 간에 전달하거나 디스크에 쓸 때 사용하는 표준 자바 인터페이스다
- 리플렉션 기반 : 자바 리플렉션으로 작동해서 시스템이 런타임에 클래스, 필드를 동적 검사해 객체를 직렬화
- 성능 : 리플렉션은 느린 프로세스기 때문에 Parcelable보다 느리고 직렬화하는 동안 많은 임시 객체를 만들어 메모리 오버헤드가 증가
- 사용 사례 : 성능이 중요하지 않은 시나리오, 안드로이드 전용이 아닌 코드를 다룰 때
Parcelable
- 안드로이드 전용 인터페이스 : 안드로이드 컴포넌트 안의 고성능 프로세스 간 통신(IPC3)을 위해 설계된 안드 전용 인터페이스
- 성능 : 안드로이드에 최적화됐고 리플렉션에 의존하지 않아서 Serializable보다 빠르다. 임시 객체를 많이 만들지도 않아서 가비지 컬렉션을 최소화한다
- 사용 사례 : 성능이 중요한 경우, 액티비티 or 서비스 간에 데이터를 전달하는 등 안드로이드에서 데이터를 보내는 작업 시 선호됨
플러그인 중 kotlin-parcelize는 구현을 자동 생성해서 Parcelable 객체를 만드는 프로세스를 간소화한다. 클래스에 @Parcelize를 추가하면 플러그인이 필요한 Parcelable 구현을 만든다. 이렇게 하면 writeToParcel() 등 함수를 재정의할 필요가 없어 보일러 플레이트가 줄어든다.
import kotlinx.parcelize.Parcelize
import android.os.Parcelable
@Parcelize
class User(val firstName: String, val lastName: String, val age: Int) : Parcelable
대부분의 사용 사례에서 더 나은 성능을 제공하는 Parcelable이 권장되는 접근 방식이다.
@Parcelize는 당연히 data class에서도 사용 가능한데 data class 안에서 다른 data class를 사용하는 상태에서 외부 data class에 @Parcelize를 사용하면 내부 data class에도 @Parcelize를 사용해야 한다. 그렇지 않으면 컴파일 에러가 발생한다.
반응형
'스터디' 카테고리의 다른 글
[Manifest-Android] 6. 매니페스트 (0) | 2025.06.21 |
---|---|
[Manifest-Android] 5. Application (0) | 2025.06.13 |
[Manifest-Android] 4. Context (0) | 2025.06.13 |
[Manifest-Android] 2. 인텐트 (0) | 2025.06.12 |
[Manifest-Android] 1. 안드로이드 프레임워크 (0) | 2025.06.07 |
Comments