관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[안드로이드] Parcelabe vs Serializable 성능차이 본문

안드로이드/자바 & Previous

[안드로이드] Parcelabe vs Serializable 성능차이

막무가내막내 2019. 8. 14. 14:50
728x90

이번에 부스트코스 리뷰를 받으면서 객체를 전달할 때 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

 

Java Reflection 개념 및 사용법

Java Reflection 정의 리플렉션이란 객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법을 말한다. 투영, 반사 라는 사전적인 의미를 지니고 있다. 스프링을 공부하다가 보면 BeanFactory 라는 Spring Contai..

gyrfalcon.tistory.com

https://stackoverflow.com/questions/3323074/android-difference-between-parcelable-and-serializable

 

Android: Difference between Parcelable and Serializable?

Why does Android provide 2 interfaces for serializing objects? Do Serializable objects interopt with Android Binder and AIDL files?

stackoverflow.com

https://medium.com/@limgyumin/parcelable-vs-serializable-%EC%A0%95%EB%A7%90-serializable%EC%9D%80-%EB%8A%90%EB%A6%B4%EA%B9%8C-bc2b9a7ba810

 

Parcelable vs Serializable , 정말 Serializable은 느릴까?

원문 : “Parcelable vs Serializable”

medium.com

 

728x90
Comments