Activity 등에 클래스 데이터를 전달하기위해 Serialization, Deserialization하는 코드로 화면 간 데이터는 최소화하여 전달하도록 권장하고 있으므로 그냥 방법만 알아두자

 

@Entity(tableName = "card_table")
data class Card(
        @PrimaryKey(autoGenerate = true) val id: Long?,
        @ColumnInfo(name = "card_name") val cardName: String?,
        @ColumnInfo(name = "card_number") val cardNumber: String?,
        @ColumnInfo(name = "limit_amount") val limitAmount: Long = 0,
        @ColumnInfo(name = "description") val description: String?
): Parcelable {
    constructor(name: String, number: String, limit: Long, desc: String): this(null, name, number, limit, desc)

    constructor(parcel: Parcel) : this(null, parcel.readString(), parcel.readString(), parcel.readLong(), parcel.readString())

    override fun describeContents(): Int {
        return 0
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(cardName)
        parcel.writeString(cardNumber)
        parcel.writeLong(limitAmount)
        parcel.writeString(description)
    }

    companion object CREATOR : Parcelable.Creator<Card> {
        override fun createFromParcel(parcel: Parcel): Card {
            return Card(parcel)
        }

        override fun newArray(size: Int): Array<Card?> {
            return arrayOfNulls(size)
        }
    }
}

 

위와 같이 boilerplate 코드와 override 함수들로인해 data class의 코드가 많이 복잡해지고 attribute의 non-null 속성도 보장하지 못하게 된다.

 

 

+ Recent posts