Android Intent에서 Bundle을 왜씀?

K4keye·2022년 1월 18일
0

Intent

Android 에서 intent 는 메시싱 객체로 다른 요소로부터 작업을 요청하는데 사용할 수 있다. 대표적으로 사용하는 방법이 역시 액티비티를 호출하는 것이다.

궁굼

intent에서 데이터를 전달하는 방법으로 인텐트 내부에 구현되어 있는 putExtra() 메서드를 활용하는 방법이 있다.
여기서 궁굼한것이 생겼다.

//1
val intent = Intent()
intent.putExtra("key","value")

//2
val intent = Intent()
val bundle =Bundle()
bundle.putString("key","value")
intent.putExtra("bundle",bundle)

1번 방법과 2번 방법의 차이가 무엇일까
나는 항상 1번 방법을 사용하고있었는데 2번 방법이있다는걸 알게되었다.


위와 같이 두 방식을 사용하게 돼도 같은 결과가 이루어지게 되는데

한눈에 봐도 Bundle를 사용하는 부분이 더 손이 많이 가고 번거로움을 알 수 있다.
그래서 나는 Bundle를 사용하지 않는 게 더 편해 보이긴 한다.

내부 구조

편한 건 Bundle를 사용하지 않는 것이 분명 편한 건 있다.
하지만 내부 구조를 보면 말이 달라진다.(아마도)

private Bundle mExtras;
public @NonNull Intent putExtra(String name, @Nullable String value) {
	if (mExtras == null) {
		mExtras = new Bundle();
	}
	mExtras.putString(name, value);
	return this;
}

Intent의 putExtra()는 결국 Bundle를 사용하고 있다.
즉 putExtra()는 단순히 편리함을 위해 도와주고 있는 모습으로 보인다.

그에 반해

ArrayMap<String, Object> mMap = null;
public void putString(@Nullable String key, @Nullable String value) {
	unparcel();
	mMap.put(key, value);
}

Bundle의 메서드를 확인해보면 Map를 활용하여 데이터를 넣고 있다.

결론

그럼 내부적으로는 Bundle를 쓰고 있느니
그냥 편리한 Intent의 메서드들을 활용하는 게 좋은 걸까

if (mExtras == null) {
	mExtras = new Bundle();
}

문제는 intent에 직접적으로 데이터를 넣으면 위의 코드를 지나가게된다.
즉 데이터를 넣을 때마다 조건문을 한번 통과를 해야 하는 것인데.

그에 반해 Bundle을 사용하면

mMap.put(key, value);

Map에 바로 put 하기 때문에
데이터를 넣는 양에 따라 속도 차이가 날… 수도 있겠다.

결론적으로 Bundle를 활용하는 게 더 좋아 보인다.

profile
쉬엄쉬엄 마치 취미처럼 공부하자

0개의 댓글