Q21) SparseArray
SparseArray 사용의 장점은 무엇인가요?
SparseArray (android.util package)는 HashMap과 유사하게 정수 key를 객체 value에 매핑하는 Android의 데이터 구조입니다. 그러나 integer인 key와 함께 사용하도록 최적화되어 있어, 정수 기반 key를 사용할 때 일반 Map이나 HashMap보다 메모리 효율적인 대안이 됩니다.
SparseArray의 주요 특징
메모리 효율성:
key-value매핑을 위해HashTable을 사용하는HashMap과 달리,SparseArray는auto-boxing(기본형int를Integer로 변환)을 피하고Entry objects와 같은 추가 데이터 구조에 의존하지 않습니다. 이로 인해 메모리를 훨씬 적게 소비합니다.성능: 매우 큰 데이터 세트의 경우
HashMap만큼 빠르지는 않지만,SparseArray는 메모리 최적화 덕분에 중간 규모의 데이터 세트에서 더 나은 성능을 제공합니다.null key불허:SparseArray는primitive integers를key로 사용하므로null key를 허용하지 않습니다.
SparseArray의 사용법은 Android의 다른 map과 유사한 구조와 마찬가지로 간단합니다.
Array 또는 HashMap보다 SparseArray를 사용하는 이점
Auto-Boxing방지:HashMap<Integer, Object>에서key는Integer object로 저장되어boxing및unboxing작업으로 인한 오버헤드가 발생합니다.SparseArray는int key를 직접 사용하여 메모리 및 계산 노력을 절약합니다.메모리 절약:
SparseArray는key와value를 저장하기 위해 내부적으로primitive array를 사용하여Entry와 같은 여러 객체를 생성하는HashMap구현에 비해 메모리 공간을 줄입니다.콤팩트한 데이터 저장: 적은 수의
key-value pair를 가진 스파스 데이터 세트나key가 넓은 범위의integer에 걸쳐 드문드문 분포된 데이터 세트에 적합합니다.Android전용 설계: 제한된 리소스 시나리오를 처리하기 위해Android용으로 특별히 설계되었으며,Android UI components에서View ID를 객체에 매핑하는 것과 같은 사용 사례에 특히 효과적입니다.
SparseArray의 한계
SparseArray는 메모리 효율적이지만, 모든 사용 사례에 항상 최선의 선택은 아닙니다:
성능 절충:
SparseArray에서 요소에 접근하는 것은key lookup을 위해binary search를 사용하기 때문에 매우 큰 데이터 세트의 경우HashMap보다 느립니다.정수
Key만 가능:integer key로 제한되어 다른 유형의key가 필요한 사용 사례에는 적합하지 않습니다.
요약
SparseArray는 Android에서 integer key를 object value에 매핑하기 위한 특수 데이터 구조로, 메모리 효율성에 최적화되어 있습니다. auto-boxing을 피하고 메모리 사용량을 줄이는 측면에서 HashMap보다 상당한 이점을 제공하며, 특히 integer key를 가진 데이터 세트에 유용합니다. 일부 성능을 메모리 절약과 맞바꿀 수 있지만, Android application과 같이 리소스가 제한된 사용 사례에는 탁월한 선택입니다.
- Q) 일반적인 HashMap 대신 SparseArray를 사용하는 것을 선호하는 시나리오는 무엇이며, 성능과 사용성 측면에서 어떤 절충점이 있나요?