제이슨의 개발이야기
Android Parcel과 Parcelable View 이동 간 객체 데이터 전송 본문
안녕하세요!
오늘은 Parcel 과 Parcelable에 대해서 공부하려고 합니다!
Parcel은 뭘까?
Parcel 은 번역하자면 꾸러미 라는 뜻으로 짐을 싸듯이 객체를 싸는 클래스가 Parcel 클래스 입니다
Parcel 클래스는 직렬화시 Container 역할을 하는 클래스로 말 그대로 꾸러미 입니다
Parcelable 은 뭘까?
Parcelable은 Android에서 지원해주는 SDK에 포함되어 있는 인터페이스 입니다 Parcel은 소포, 택배라고 생각하면 쉽고
Parcelable은 택배로 부칠 수 있는 정도로 생각하면 좋을 거 같습니다
Parcelable 의 장점
Parcelable 객체는 Parcel로 만들고 풀 수 있는대 Parcelable을 이용하면 Serializable과 다르게 리플랙션을 사용하지 않고 필요한 부분만을 직렬화하기 비직렬화 할 수 있도록 만들 수 있어 효율성을 향상 시킬 수 있습니다
Parcelable의 단점
보일러 플레이트 코드가 늘어남
-> 직렬화 : writetoParcel() 메서드를 통해 Parcel 객체에 데이터 저장
-> 역직렬화 : createFromParcel() 메서드를 통해 Parcel로 부터 원래 객체 모양에 따라 데이터 복원
즉 : 굉장히 코드가 복잡해 보이고 봐야할 코드가 많아 보이는 것이 단점입니다
이러한 단점을 해결 하기 위해 Parcelize Plugin 이 등장했습니다!
build.gradle app modul에서 플러그인 을 추가해줍니다
plugins {
id("kotlin-parcelize")
}
그리고 나서 원하는 data 클래스에
아래와 같이 어노테이션과 Parcelable 인터페이스를 implement 해주면 됩니다
아래는 실제로 제가 개인 프로잭트를 하면서 만들었던 data 클래스입니다 예시로 봐주세요!
@Parcelize
data class VaccineStations(
var stationMap: HashMap<Int, List<Data>> = HashMap<Int,List<Data>>()
) : Parcelable
이렇게 해주면
간단하게 안드로이드 에서 view 이동 간 데이터 전달을 쉽게 구현할 수 있습니다!
아래는 데이터 객체를 전송하는 예시입니다
var bundle = Bundle()
bundle.putParcelable("data",VaccineStations())
// 그리고 bundle 을 전송
// 아래는 navigation component를 이용
navController.navigate(R.id.action_mainFragment_to_nextFragment,bundle)