티스토리 뷰

여러 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에 찍히는 것을 확인할 수 있다>_<
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함