Android Parcelable & Serializable

kjy0302014·2021년 4월 8일
0

Android

목록 보기
1/3

Parcelable & Serializable

앱을 개발하다보면 POJO와 같이 큰 객체를 Activity 와 같이 Android 요소에 보내게 되는 경우가 생기는데 Android 요소는 우리가 생성해서 관리하는게 아니라 Android System에서 관리하기때문에 이 요소에 데이터를 보내려면 Intent로 보내야하는데 객체를 ByteCode로 직렬화(Serializable)시켜 보내야한다.

Serializable이란?

Serializable은 자바 표준 인터페이스 입니다.

단어 뜻을 보면 Serial(직렬의) + ~able(~가능한) 이란 뜻으로 직렬화 한다라는 의미를 가지고 있다.

전달하고자 하는 데이터 클래스에 Serializeable 인터페이스를 구현하면 자동으로 Bytecode로 직렬화 시켜준다.

data class Animal(val name: String, val food : String , val age : Int) : Serializable {
    fun getData() : String = "이 동물은${name}이고 나이는${age}이다.\n즐겨먹는 음식은${food}이다."
    fun printData(){
        println(getData())
    }
}

implements Serializable 을 추가 하는것으로 Animal 객체를 다른 Actiivty에 Intent로 전달할 수 있다.

하지만 간단하게 구현한 만큼 그에 따른 리스크가 있는데 내부적으로 리플렉션이 발생하게 되어 오브젝트가 많이 생성이 된다. 이에 따른 Garbage Collection이 발생하게 되어 성능저하 및 베터리를 많이 소모하게된다.

Parcelable이란?

Parcelable은 또 다른 인터페이스의 한종류로 자바가 아닌 안드로이드 SDK내에 포함되어있고 리플렉션을 사용하지 않기위해 특별하게 설계되었다.

예전에는 kotlin-android-extension 에 이 클래스가 포함이 되어있었는데 kotlin 버전이 1.4.20으로 올라가면서 Deprecated 되었다. 그래서 kotlin-parcelize 플러그인을 반영해서 사용해야한다.

@Parcelize
data class Animal(val name: String, val food: String, val age: Int) : Parcelable {

    fun getData() : String = "이 동물은${name}이고 나이는${age}이다.\n즐겨먹는 음식은${food}이다."
    fun printData(){
        println(getData())
    }
}

이런식으로 @Parcelize 어노테이션과 Parcelable을 implement 시켜 구현하면 된다.

https://developer.android.com/kotlin/parcelize

profile
Android Developer

0개의 댓글