Android

안드로이드에서의 Parcelable vs Serializable

최데브 2021. 1. 28. 16:16

안드로이드를 개발하다보면 다른 액티비티로 데이터를 전달할때

 

그 데이터가 복잡한 클래스의 객체라면 Serializable 또는 Parcelable 를 사용하여 직렬화 하여 인텐트에 추가해야한다.

 

그럼 직렬화는 뭘까?

 

직렬화는

1. 메모리 내에 존재하는 정보를 보다 쉽게 전송 및 전달하기 위해 byte 코드 형태로 나열하는 것이다. 여기서 메모리 내에 존재하는 정보는 즉 객체를 말한다.

2. JVM 의 메모리에 상주 되어있는 객체 데이터를 바이트 형태로 나타내는 기술

 

역직렬화 라는 개념도 있는데 말그대로 위의 내용의 반대라고 생각하면 된다.

 


Serializable 부터 뭔지 알아보자.

Serializable 는 Java 에서 제공하는 interface다 사용하기도 쉽고 직렬화 또한 잘된다.

그러나!

사용하기 쉬운 대신 시스템적인 리소스가 많이 든다. 물론 상대적으로

 

이유는 정확하게 모르겠으나 찾아본 결과

1. Serializable 는 내부에서 Reflection 을 사용해서 직렬화를 처리한다.

2. Reflection 은 프로세스 동작 중에 사용되며 처리 과정중에 많은 추가 객체를 생성하고 이 많은 객체들이

가비지 컬렉터의 타겟이 되며 가비지 컬렉터의 과도한 동작으로 인해서 성능 저하가 발생한다.

 

Reflection 에 대해서는 추후에 더 자세하게 따로 포스팅하도록 하겠다.

 


그럼 이번엔 Parcelable 에 대해서 알아보자.

 

Parcelable 은 직렬화를 위해 Java가 아닌 Android SDK 에서 제공하는 interface 다.

기존에 있던걸 개선하기 위해 새로 나온것인게 분명하다.

 

Parcelable 은 성능저하의 주범인 Reflection 을 사용하지 않도록 만들어졌다,

Serializable 과 달리 직렬화 처리를 사용자가 명시적으로 작성한다. 그래서 Parcelable 가 필요가 없다.

그래서 비교적 성능이 좋은 편인데 단점은 사용하기 어렵고 클래스가 복잡해지면 유지 보수가 어려워진다.

 

어느게 더 좋다에 대해서는 논란되는 말이 많은데

 

성능을 좋게 만드는게 우선이다! vs 빠르게 만드는거보다 내가 프로그램을 잘 이해해서 올바른 결과를 만드는게 맞다!

 

로 갈리는데 이건 상황에 따라 선택하면 될 일인거 같다.

 

 

 

반응형