[Kotlin] Serializable와 Parcelable 차이 그리고 Kotlin Pacelize

Kenneths
Kenneth Android
Published in
3 min readNov 16, 2020
Photo by kenneth

안드로이드 앱을 개발할 때 액티비티 혹은 프래그먼트에 복잡한 클래스 데이터를 전달하기 위해서는 Serializable 혹은 Parcelable을 사용해서 데이터들을 직렬화해서 전달해야 합니다.

안드로이드에서는 직렬화 방법이 크게 2가지가 있습니다

  • Serializable (Java 표준 인터페이스)
  • Parcelable (Android SDK 인터페이스)

먼저 Serializable 의 구현 코드를 보겠습니다

클래스 인터페이스로 Serializable만 상속받으면 끝입니다.
간단해 보이죠?

이제 Parcelable 구현 코드를 살펴보죠

Parcelable 인터페이스를 Implement 한 후에 함수들을 Override한 후 맞게 구현해 주시면됩니다.

Parcelable 사용시 3개의 파라미터는 코드 양이 어느 정도 작아보이지만
늘어나면 늘어날 수록 Parcelable을 사용하기 위한 유지, 보수 및 생성 리소스가 많이 소요됩니다.

이 2가지의 사용 방법 중에 항상 비교 되는 것은 ‘편리함’ 과 ‘속도’ 입니다.
결론적으로는 Pacelable 이 속도가 더 빠르지만 구현, 유지 비용이 Serializable에 비해서 더 많이 소모됩니다

Serializable이 상대적으로 속도가 더 느린 이유는 자바의 ‘Refelction'을 사용하기 때문인데요. Reflection 을 프로세스 동작 중에 많은 추가 객체들을 생성합니다. 추가 객체 생성 후에 나온 쓰레기들은 가비지 컬렉터의 타켓이 되고 과도한 동작으로 오버헤드가 발생합니다.

하지만 Kotlin 에서는 대안이 존재합니다.

바로 Parcelize 입니다. 바로 사용 방법을 알아보겠습니다

build.gradle에 extensions 플러그인을 적용해줍니다.

클래스에 Parcelize 어노테이션을 선언하고 Parcelable을 Implement 하는것으로 간단하게 구현이 가능합니다.

하지만 반전이 있습니다. Serializable이 항상 Parcelable 보다 느린 것은 아닌 것 같습니다. GM.Lin 님의 포스팅에서는 Serializable에서 자동으로 처리되는 직렬화 프로세스에서 writeObject() 와 readObject()를 사용자가 구현 함으로써 Serializable의 속도가 더 높게 측정이된 결과물을 공유해주셨습니다.!

마무리
아직도 Parcelable, Serializable 에대해서 성능과 사용자의 노력에 대비 어떤 것이 가끔씩 이슈가 생기는 것 같습니다. 항상 개발에 정답은 없는 것 같습니다. 사용목적과 시간 및 비용과 상황에 맞게 적절히 사용하는 것이 베스트라고 생각합니다. :)

--

--

Kenneths
Kenneth Android

사용자들에게 편리하고 AweSome UI, UX를 경험해주고 싶은 상위 티어 개발자가 되고싶어 달려가고있는 개발자입니다. 다양한 내용들을 공유하려고 합니다.