티스토리 뷰
여러 Fragment와 Activity를 연결하며 내가 만든 custom class 타입 객체를 통째로 넘길 일이 생겼다!
똑같이 Intent에 담아 넘기려고 했지만 빨간줄이 생겼고, 몇가지 추가 작업이 필요한 것을 알게 되었다🤔
Serializable (vs Parcelable)
- Serializable은 객체 직렬화를 위한 표준 Java의 인터페이스이다
- 인터페이스임에도 불구하고 구현해줘야할 메소드가 없기 때문에 아주아주 간단하게 사용이 가능하다
- 하지만 처리과정에서 다수의 추가 객체를 생성하므로 생성 저하를 발생시킬 수 있다고 한다
- Parcelable은 직렬화를 위한 Android SDK인데, 필수적으로 구현해줘야 하는 메소드가 있으므로 보일러 플레이트가 발생하게 된다
- 성능은 Parcelable가 더 좋지만 용이한 유지보수를 위해서는 Serializable을 사용한다고 하는데, 이 부분은 나중에 Parcelable을 공부하며 더 자세히 알아보도록 하겠다
Serializable 사용하기
Path.kt
import java.io.Serializable
data class Path(
val pathType: Int,
val totalTime: Int,
val totalPay: Int,
val transitCount: Int,
val totalWalkTime: Int,
val subPath: ArrayList<SubPath>,
val leastTotalTime:Int
) : Serializable
data class SubPath(
val trafficType: Int,
val distance: Int,
val sectionTime: Int,
val stationCount: Int?,
val lane: Lane?,
val startName: String?,
val startX: Double?,
val startY: Double?,
val endName: String?,
val endX: Double?,
val endY: Double?,
val way: String?,
val wayCode: Int?,
val door: String?,
val fastExitNo : Int,
val fastExitX: Double?,
val fastExitY: Double?,
val passStopList: ArrayList<String>,
var clicked: Boolean?
) : Serializable
data class Lane(
val name: String,
val type: Int,
val busID: Int
) : Serializable
- 먼저 전달하려는 DataClass에서 Serializable을 상속받아야 한다
- 만약 데이터 클래스 안에 또 다른 데이터 클래스 타입의 객체가 포함되어 있다면 해당 데이터 클래스도 Serializable을 상속받아야 한다
PathResultFragment.kt
val intent = Intent(requireContext(), TestPathActivity::class.java)
intent.putExtra("path", viewModel.routeList.value!![position])
startActivity(intent)
- 이제 Fragment 또는 Activity에서 원하는 데이터를 Intent에 담아 넘기면 된다
- 나는 path라는 key로 Path 타입의 데이터를 Intent에 담아 넘겼다
PathActivity.kt
val pathData = intent.getSerializableExtra("path") as Path
- 수신 Fragment 또는 Activity에서 다음과 같이 데이터를 꺼낼 쓰면 된다
- 타입을 바꿔주지 않으면 Serializable 객체로 만들어지므로 as 키워드를 이용해 타입 캐스팅을 해줘야 한다
- 이렇게 결과를 잘 받아 Log에 찍히는 것을 확인할 수 있다>_<
'Android' 카테고리의 다른 글
[Android] 안드로이드 스레드 (Android Thread) (0) | 2020.06.24 |
---|---|
[Android] 안드로이드 Activity와 Fragment의 생명주기 (0) | 2020.06.23 |
[Android] 어플리케이션 기본 항목 - 4대 컴포넌트, App Manifest (0) | 2020.06.23 |
[Android & kotlin] AAC(Android Architecture Components) - Room (0) | 2020.06.22 |
[kotlin] DI 의존성 주입 - koin 사용하기 (0) | 2020.06.14 |