일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 막내의 막무가내 알고리즘
- 막내의막무가내 rxjava
- 안드로이드
- 막내의막무가내 안드로이드 코틀린
- 막내의막무가내 일상
- 막내의막무가내 목표 및 회고
- 막내의막무가내 안드로이드
- 막내의막무가내 코틀린 안드로이드
- 막내의막무가내 SQL
- 안드로이드 Sunflower 스터디
- flutter network call
- 막내의막무가내 플러터
- 프로그래머스 알고리즘
- 막내의막무가내 프로그래밍
- 2022년 6월 일상
- 프래그먼트
- 막내의막무가내 코틀린
- 막내의막무가내
- 막무가내
- 막내의막무가내 코볼 COBOL
- 막내의막무가내 플러터 flutter
- 부스트코스
- 안드로이드 sunflower
- 막내의막무가내 안드로이드 에러 해결
- 주엽역 생활맥주
- 부스트코스에이스
- 막내의막무가내 알고리즘
- 주택가 잠실새내
- 막내의 막무가내
- Fragment
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[안드로이드] Parcelabe vs Serializable 성능차이 본문
이번에 부스트코스 리뷰를 받으면서 객체를 전달할 때 Serializable이 간편해서 써왔는데 성능상 Parcelabe을 이용하는게 좋다는 리뷰를 받아서 이에대해 알아보는 포스팅을 해보겠습니다.
제목과 같이 둘의 성능차이에 대해 여러글들을 구글링 해보고 요약 및 정리해봤습니다.
Parcelable 인터페이스는 Serializable인터페이스보다 구현하는 것보다 좀 더 어렵지만 읽기 및 쓰기 속도는 더 느립니다.(글마다 다른데 양이 많을수록 Parcelable이 훨씬 효율적이게 되고 2배~10배 가까이 빠르다고 합니다.)
Serializable 은 해당클래스가 직렬화 대상이라고 알려주기만 할 뿐 어떠한 메서드도 가지지 않는 단순한 “마커 인터페이스 (Marker Interface)” 이므로, 사용자는 매우 쉽게 사용할 수 있습니다. ( 데이터 클래스(POJO)에 Serializable인터페이스만 implements하면 됩니다.)
사용방법이 쉽다는 것은 곧 시스템적인 비용이 비싸다는 것을 의미 합니다.
Serializable 은 내부에서 Reflection을 사용하여 직렬화를 처리합니다. Reflection 은 프로세스 동작 중에 사용되며 처리 과정 중에 많은 추가 객체를 생성 합니다. 이 많은 쓰레기들은 가비지 컬렉터의 타겟이 되고 가비지 컬렉터의 과도한 동작으로 인하여 성능 저하 및 배터리 소모가 발생합니다.
(Reflection이란 리플렉션이란 객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법을 말합니다. 메소드를 호출 할 때, 타겟이 실제로 메소드 선언 자의 인스턴스인지, 올바른 인수 번호를 가지고 있는지 여부, 각 인수의 유형이 올바른지 여부 등을 확인해야합니다. 즉 런타임에 코드의 동작을 유지하고 수정하는 유연하지만 느린 방법입니다.)
그에 반해 Parcelable 은 Reflection을 사용하지 않도록 설계되었습니다. Serializable 과는 달리 직렬화 처리 방법을 사용자가 명시적으로 작성하기 때문에 자동으로 처리하기 위한 Reflection 이 필요 없습니다.
이러한 이유 때문에 Parcelable 사용을 선호해야합니다. Parcelable은 Serializable보다 기본 자바 직렬화 체계의 일부 문제점들을 해결하고 효율적인 작업을 위해 만들어진 안드로이드 전용 인터페이스입니다. (Serializable은 표준 자바 인터페이스입니다.) Serializable이 안좋다는 이유로는 리플렉션이 사용되며 느리게 진행되서라고 합니다.)
추가로 Parcelable을 쉽게 구현하는 방법이있습니다.
안드로이드 Plugin에서 Parcelable을 검색해서 android parcelable code generator를 다운 받고 데이터클래스(POJO)로 가서 윈도우 기준 Alt+Enter, Mac 단축키 기준 cmd+n을 눌러
Parcelable을 클릭해주면 됩니다.
요약하면 성능은 Parcelable 유연성은 Serializable인 것 같습니다. (Serializable이 에전보다 빨라졌다고는 합니다.)
참고:
https://gyrfalcon.tistory.com/entry/Java-Reflection
https://stackoverflow.com/questions/3323074/android-difference-between-parcelable-and-serializable
'안드로이드 > 자바 & Previous' 카테고리의 다른 글
[안드로이드] 부스트코스 7단원 멀티미디어 내용요약 (0) | 2019.09.03 |
---|---|
[안드로이드] Room 데이터베이스 (14) | 2019.08.25 |
[안드로이드] 특정 텍스트 복사 ClipboardManager (0) | 2019.08.13 |
[안드로이드] 프래그먼트 백스택 (fragment backstack) (4) | 2019.08.10 |
[안드로이드] 리사이클러뷰 , 스와이프리프레쉬아웃 함께 사용 ( recyclerview, SwipeRefreshLayout) (2) | 2019.08.10 |