일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자이고트
- AAC
- viewModelScope
- DiffUtil
- 뷰홀더
- NestedScrollView
- 내부 단편화
- appcompatacitivity
- http발전과정
- Dispatchers
- 디자인 패턴
- 프로세스
- 안드로이드
- 플로이드워셜
- AsyncListDiffer
- 운영체제
- 상태관리
- Kotlin
- Android
- http 역사
- apk 빌드 과정
- 리사이클러뷰풀
- 리사이클러뷰
- recyclerview
- GetX
- flutter
- 절대 주소
- 물리 메모리
- appcompatactivity
- 데코레이터 패턴
- Today
- Total
hong's android
[안드로이드] Serializable과 Parcelable 본문
Serializable(직렬화)란?
서로 다른 메모리 공간을 가지고 있는 시스템은 같은 객체를 참조할 수 없다. 그렇기 때문에 객체 내용을 직렬화된 바이트 코드로 변환해서 객체 값을 주고받을 수 있게 한다.
Serializable(직렬화) 하는 이유
객체의 영속성을 위해서, jvm 상에 있는 객체 정보는 프로그램이 종료되면 사라진다. 네트워크로 객체의 값을 보내야 한다.
자바는 Serializable 인터페이스를 구현해야 직렬화가 가능한데, 이 Serializable 인터페이스는 기능들이 들어있지 않은 마크 인터페이스다.
Serializable과 Parcelable
Serializable은 Java.io 패키지에 속한 인터페이스, parcelable은 안드로이드 sdk에 포함된 인터페이스이다.
Serializable은 내부적으로 리플렉션 Api를 사용하고 그 과정에서 불필요한 객체들을 많이 사용한다. 또한 그 불필요한 객체들은 gc의 대상이 되고 불필요한 GC로 성능이 저하된다.
반면, parcelable은 사용하지 않는데 따로 구현을 해주는 부분이 추가되었고 이로 인해 개발자는 작성해야할 코드가 늘어난다.
*리플렉션 : 해당 객체 타입을 몰라도 동적으로 클래스 정보를 알수 있게 해 주는 것. 어떤 객체를 직렬화하려면 해당 객체의 필드 정보에 접근해야 한다. Reflection API에는 객체의 필드에 접근할 수 있도록 도와주는 메서드를 제공한다. 메서드 영역의 클래스 정보를 가져온다.
Serializable에서 자동으로 처리되는 부분들을 writeObject(), readObject()로 처리 가능하다. 두 메소드를 추가 구현하면 성능 향상을 기대할 수 있다.
Parcelable을 안드로이드에서 사용하는 경우
컴포넌트 간 객체를 주고받아야 할 때
Reference.
https://medium.com/@limgyumin/parcelable-vs-serializable- 정말-serializable은-느릴까-bc2 b9 a7 ba810
'Android > Android' 카테고리의 다른 글
[안드로이드] View lifecycle (0) | 2023.01.16 |
---|---|
[안드로이드] Handler, Content Provider, xml 레이아웃 (0) | 2023.01.14 |
[안드로이드] 자이고트 (0) | 2023.01.13 |
[안드로이드] 포어그라운드 서비스 VS 백그라운드 서비스 (0) | 2023.01.10 |
[안드로이드] Weak Reference VS Strong Reference (0) | 2023.01.09 |