ckgod.github Help

Q21) SparseArray

SparseArray 사용의 장점은 무엇인가요?

SparseArray (android.util package)는 HashMap과 유사하게 정수 key를 객체 value에 매핑하는 Android의 데이터 구조입니다. 그러나 integerkey와 함께 사용하도록 최적화되어 있어, 정수 기반 key를 사용할 때 일반 Map이나 HashMap보다 메모리 효율적인 대안이 됩니다.

SparseArray의 주요 특징

  1. 메모리 효율성: key-value 매핑을 위해 HashTable을 사용하는 HashMap과 달리, SparseArrayauto-boxing (기본형 intInteger로 변환)을 피하고 Entry objects와 같은 추가 데이터 구조에 의존하지 않습니다. 이로 인해 메모리를 훨씬 적게 소비합니다.

  2. 성능: 매우 큰 데이터 세트의 경우 HashMap만큼 빠르지는 않지만, SparseArray는 메모리 최적화 덕분에 중간 규모의 데이터 세트에서 더 나은 성능을 제공합니다.

  3. null key 불허: SparseArrayprimitive integerskey로 사용하므로 null key를 허용하지 않습니다.

SparseArray의 사용법은 Android의 다른 map과 유사한 구조와 마찬가지로 간단합니다.

// import android.util.SparseArray val sparseArray = SparseArray<String>() sparseArray.put(1, "One") sparseArray.put(2, "Two") // Accessing elements val value = sparseArray[1] // "One" // Removing an element sparseArray.remove(2) // Iterating over elements for (i in 0 until sparseArray.size()) { val key = sparseArray.keyAt(i) val value = sparseArray.valueAt(i) println("Key: $key, Value: $value") }

Array 또는 HashMap보다 SparseArray를 사용하는 이점

  1. Auto-Boxing 방지: HashMap<Integer, Object>에서 keyInteger object로 저장되어 boxingunboxing 작업으로 인한 오버헤드가 발생합니다. SparseArrayint key를 직접 사용하여 메모리 및 계산 노력을 절약합니다.

  2. 메모리 절약: SparseArraykeyvalue를 저장하기 위해 내부적으로 primitive array를 사용하여 Entry와 같은 여러 객체를 생성하는 HashMap 구현에 비해 메모리 공간을 줄입니다.

  3. 콤팩트한 데이터 저장: 적은 수의 key-value pair를 가진 스파스 데이터 세트나 key가 넓은 범위의 integer에 걸쳐 드문드문 분포된 데이터 세트에 적합합니다.

  4. Android 전용 설계: 제한된 리소스 시나리오를 처리하기 위해 Android용으로 특별히 설계되었으며, Android UI components에서 View ID를 객체에 매핑하는 것과 같은 사용 사례에 특히 효과적입니다.

SparseArray의 한계

SparseArray는 메모리 효율적이지만, 모든 사용 사례에 항상 최선의 선택은 아닙니다:

  1. 성능 절충: SparseArray에서 요소에 접근하는 것은 key lookup을 위해 binary search를 사용하기 때문에 매우 큰 데이터 세트의 경우 HashMap보다 느립니다.

  2. 정수 Key만 가능: integer key로 제한되어 다른 유형의 key가 필요한 사용 사례에는 적합하지 않습니다.

요약

SparseArrayAndroid에서 integer keyobject value에 매핑하기 위한 특수 데이터 구조로, 메모리 효율성에 최적화되어 있습니다. auto-boxing을 피하고 메모리 사용량을 줄이는 측면에서 HashMap보다 상당한 이점을 제공하며, 특히 integer key를 가진 데이터 세트에 유용합니다. 일부 성능을 메모리 절약과 맞바꿀 수 있지만, Android application과 같이 리소스가 제한된 사용 사례에는 탁월한 선택입니다.

23 October 2025