[TIL] #36 Bundle

Yeon·2023년 9월 11일
0

내일배움캠프 - Kotlin

목록 보기
49/58
post-thumbnail

1. Bundle?

  • key-value 쌍의 데이터 컨테이너
  • 데이터를 저장하고 전달하는 데 사용함
    • key: String
    • value: Int, String, Serializable, Parcelable...
  • Android에서는 객체를 전달할 때 보통 Parcelable을 구현한 객체를 전달함

2. 주요 기능

1) 데이터 전달

  • 인텐트(Intent)를 통해 다른 액티비티로 데이터를 전달하는 데 사용
    • ex) 다른 액티비티로 문자열, 숫자, 객체 등의 데이터를 전달할 수 있음

2) 상태 저장 및 복원

  • 화면 회전 또는 앱이 일시 중지된 경우와 같은 상황에서 Bundle을 사용하여 액티비티 또는 프래그먼트의 상태를 저장하고 다시 복원할 수 있음

3) 프래그먼트 간 통신

  • 프래그먼트 간에 데이터를 전달하는 데에도 Bundle을 사용할 수 있음
  • 이를 통해 프래그먼트 간의 통신이 가능해짐

3. 사용 방법

1) 데이터 추가

  • 데이터를 추가하려면 put 메서드 사용
val bundle = Bundle()
bundle.putString("key", "value")

2) 데이터 추출

  • 데이터를 추출하려면 get 메서드 사용
val value = bundle.getString("key")

3) 인텐트와 함께 사용

  • Intent에 첨부하여 다른 액티비티로 데이터 전달
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("dataBundle", bundle)
startActivity(intent)

4) 상태 저장 및 복원

  • onSaveInstanceStateonRestoreInstanceState 메서드를 사용하여 액티비티 상태 저장 및 복원
override fun onSaveInstanceState(outState: Bundle) {
    outState.putString("key", "value")
    super.onSaveInstanceState(outState)
}

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)
    val value = savedInstanceState.getString("key")
}

5) 프래그먼트 간 통신

  • 프래그먼트 간에 데이터 전달
val fragment = MyFragment()
val bundle = Bundle()
bundle.putString("key", "value")
fragment.arguments = bundle

4. Bundle의 주의 사항

1) 크기 제한

  • 데이터를 저장하고 전달하는 데 사용되지만 크기에 제한이 있음
  • 큰 데이터를 저장하려면 다른 방법을 고려해야 할 수 있음

2) 직렬화

  • 저장할 수 있는 데이터 유형에는 제한이 있으며 사용자 정의 클래스를 저장하려면 직렬화를 구현해야 함

3) 키 설정

  • 데이터를 추출할 때 사용하는 키는 고유해야 함
  • 중복된 키를 사용하면 데이터가 덮어씌워질 수 있음

4) Null 값 다루기

  • null 값을 저장하려면 put 메서드 대신 putNullable 메서드를 사용해야 함



[참고 사이트]

'[Bundle] Android Bundle 이란 무엇인가? Bundle을 이용해 데이터 전달하기', 조세영의 Kotlin World
'Parcelabel 및 번들', Developer

0개의 댓글