Parcelable과 Serializable란?
안드로이드 앱을 개발할 때 인텐트에 전달할 데이터를 추가하는데, 복잡한 클래스의 객체를 추가하려는 경우 직렬화를 통해 인텐트에 추가해야합니다.
Parcelable
Parcelable은 직렬화를 위한 또 다른 인터페이스로, Serializable과 달리 Android SDK의 인터페이스 입니다.
Parcelable은 직렬화 처리 방법을 사용자가 명시적으로 작성해야하기 때문에 자동으로 처리하기 위한 Reflection이 필요없습니다. 하지만 구현해야하는 필수 메서드를 포함하고 있어 Class에 보일러 플레이트 코드가 추가되어, Class를 이해하기 어렵고, 새로운 기능을 추가하기 힘들게 만들며, 코드의 추가로 Class가 복잡해 질수록 유지보수가 어려워지는 원인이 됩니다.
Serializable
Android SDK가 아닌 표준 Java의 인터페이스 입니다.
인터페이스를 구현한 Class의 객체는 인텐트에 추가될 수 있는 준비가 되며, Serializable은 해당 Class가 직렬화 대상이라는 것만 알려주기만 할뿐 어떠한 메서드도 가지지않는 단순한 "Marker Interface" 이므로, 사용자는 매우 쉽게 사용할 수 있습니다.
Serializable은 내부에서 Reflection을 사용해 직렬화를 처리합니다.
Reflection은 프로세스 동작 중 사용되며, 처리 과정 중에 많은 추가 객체를 생성합니다. 이 많은 쓰레기들은 가비지 컬렉터의 타겟이 되어 가비지 컬렉터의 과도한 동작으로 인해 성능 저하 및 배터리 소모가 발생하게 됩니다.
*Marker Interface(마커 인터페이스) : 내부에 메서드 또는 상수가 없는 인터페이스
결과 : Serializable은 시스템 비용이 발생한다면, Parcelable은 구현, 유지보수 등에 필요한 작성자의 노력이 발생합니다.
'Android' 카테고리의 다른 글
DI (Koin)을 이용한 의존성 주입 (0) | 2021.08.02 |
---|---|
Android Studio : 유용한 단축키 (0) | 2021.07.11 |
Repository Pattern (리포지토리 패턴) (0) | 2021.06.16 |
AppCompatButton이란? (0) | 2021.06.06 |
DI(의존성 주입) 프레임워크 : Dagger2란 (0) | 2021.05.08 |