제이슨의 개발이야기

Android Parcel과 Parcelable View 이동 간 객체 데이터 전송 본문

카테고리 없음

Android Parcel과 Parcelable View 이동 간 객체 데이터 전송

제이쓰은 2022. 11. 24. 14:25
728x90
반응형

안녕하세요!

오늘은 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)
728x90
반응형