์๋๋ก์ด๋ ๊ฐ๋ฐ์์ @Serializable๊ณผ @Parcelable์ ๊ฐ๊ฐ ๋ฐ์ดํฐ ์ง๋ ฌํ(Serialization)๋ฅผ ์ํ ์ด๋
ธํ
์ด์
์ด์ง๋ง, ๋ชฉ์ ๊ณผ ์ฌ์ฉ ๋ฐฉ์์ด ๋ค๋ฆ
๋๋ค.
kotlinx.serialization.SerializableIntent๋ Bundle์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ ์์kotlinx.serialization.json.Json์ ํ์ฉํด์ผ ํจimport kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
@Serializable
data class User(val name: String, val age: Int)
fun main() {
val user = User("Alice", 25)
val json = Json.encodeToString(user)
println(json) // {"name":"Alice","age":25}
}
android.os.ParcelableIntent ๋๋ Bundle์ ํตํด ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ ๋ ์ฌ์ฉSerializable๋ณด๋ค ์ฑ๋ฅ์ด ๋ ์ข์ (๋ฉ๋ชจ๋ฆฌ ํจ์จ์ , GC ๋ถ๋ด ์ ์)@Parcelize๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋ ์์ด ์๋์ผ๋ก Parcelable ๊ตฌํ ๊ฐ๋ฅimport android.os.Parcelable
import kotlinx.parcelize.Parcelize
@Parcelize
data class User(val name: String, val age: Int) : Parcelable
// Intent์ ๋ฐ์ดํฐ ๋ด๊ธฐ
val intent = Intent(this, SecondActivity::class.java).apply {
putExtra("user", User("Alice", 25))
}
// Intent์์ ๋ฐ์ดํฐ ๊บผ๋ด๊ธฐ
val user: User? = intent.getParcelableExtra("user")
| ์ด๋ ธํ ์ด์ | ์ฃผ์ ์ฉ๋ | ์ฃผ์ ๊ธฐ๋ฅ | ์ฅ์ | ๋จ์ |
|---|---|---|---|---|
@Serializable | ๋คํธ์ํฌ ํต์ , JSON ๋ณํ | JSON ์ง๋ ฌํ/์ญ์ง๋ ฌํ | Kotlin ๋ฉํฐํ๋ซํผ ์ง์, ๋น ๋ฅธ ์ปดํ์ผ ํ์ ์ต์ ํ | Android Intent์์ ์ฌ์ฉ ๋ถ๊ฐ |
@Parcelize | ์๋๋ก์ด๋ ๋ด๋ถ ๋ฐ์ดํฐ ์ ๋ฌ (Intent, Bundle) | Parcelable ๊ตฌํ ์๋ํ | ์ฑ๋ฅ ์ต์ ํ, ์๋๋ก์ด๋์์ ๋น ๋ฆ | ์๋๋ก์ด๋ ์ ์ฉ, JSON ๋ณํ ๋ถ๊ฐ๋ฅ |
@SerializableIntent๋ Bundle๋ก ์ ๋ฌํ๋ ค๋ฉด โ @Parcelize@Serializable