안녕하세요~
intent 에 대한 예제들을 공부하다보면 값을 전달하기 위해 putExtras 전달받기위해 getExtra 를 이용하는데
어떤예제는 intent.putExtra("key", value);
이렇게 넘기고 어떤예제는 Bundle bundle = new Bundle(); -> bundle.putString("key", value); -> intent.putExtras(bundle);
이렇게 번들을 하나 생성하고 거기에 값들을 담아서 번들을 넘깁니다.
제가 이해 안되는 부분은 한번씩만 담아서 전달해도 되는데
뭐하러 다시한번 번들에 담아서 번들을 다시 intent에 담느냐 하는것입니다.
일반적으로 intent 시 putExtra로 primitive data type을 넘기는 건 많이 보셨을 겁니다. 하지만 클래스 등의 reference type의 경우(c에서 구조체를 연상하시면 더 쉽습니다) 에는 putExtra로 따로 오버로딩 되 있는 method를 찾을 수 없습니다.
그 대안으로 사용 할 수 있는게 putParcelableArrayListExtra 입니다. 여기에는 key와 value의 쌍(이중 해쉬형태로..)으로 data array를 전달하게 됩니다.
parcelable 은 인터페이스로서 bundle 에서도 구현하고 있습니다. 파일 입출력이나 네트워크시 사용되는 직렬화와 유사하게 인텐트(ipc를 생각해 보세요.)시에는 이 parcelable 을 구현한 데이터를 putExtra(Bundle bundle)이나 위의 method로 전달할 수 있어 개발자에게 매우 큰 장점이 되겠죠...
bundle은 상태/값 등을 저장하기 위한 객체이고
intent는 저장이 아닌 전달하는 수단으로의 객체라고 생각하면 됩니다.
포장이사를 하면..
박스(Bundle)에 물건 담고, 트럭(Intent)에 싣고 옮기는 것이라고 생각하세요~