Nuke Olaf - Log Store
[Android] 안드로이드 - SparseArray 란 무엇인가 본문
1. Sparse 의 뜻
영영사전에서 말하는 sparse 의 뜻이란 다음과 같다
https://dictionary.cambridge.org/ko/%EC%82%AC%EC%A0%84/%EC%98%81%EC%96%B4/sparse
" small in numbers or amount, often spread over a large area "
" 적은 수 또는 양으로, 종종 넓은 지역에 퍼짐 "
네이버 영어사전에서는 다음과 같이 말한다.
https://endic.naver.com/enkrEntry.nhn?sLn=kr&entryId=9f4820defe6e4276bfed533d8ed97cd3
(흔히 넓은 지역에 분포된 정도가) 드문, (밀도가) 희박한
Array 란 길이가 제한되어 있는 자료형의 집합을 의미한다고 배웠다. 그렇다면 SparseArray 란 밀도가 희박한 배열이라는 뜻이라고 생각할 수 있을 것 같다.
2. IT 사전에서 말하는 SparseArray 란
SparseArray 는 Android 에서 사용하는 데이터 저장 방식이기 때문에 안드로이드 개발자 문서에서 관련 내용을 찾아볼 수 있었다.
https://developer.android.com/reference/android/util/SparseArray
" SparseArray maps integers to Objects and, unlike a normal array of Objects, its indices can contain gaps. SparseArray is intended to be more memory-efficient than a HashMap, because it avoids auto-boxing keys and its data structure doesn't rely on an extra entry object for each mapping. "
" SparseArray는 정수를 객체에 매핑하며 일반적인 객체 배열과 달리 색인에는 간격이 있을 수 있습니다. SparseArray는 자동 박싱 키를 피하고 데이터 구조가 각 매핑에 대해 추가 입력 개체에 의존하지 않기 때문에 HashMap보다 메모리 효율성이 뛰어납니다. "
해당 문서의 설명으로 미루어 보아 SparseArray 란, 넓은 지역에 퍼져있는, 밀도가 희박한 이라는 뜻처럼 데이터의 인덱스 사이에 공간을 만들 수 있는 배열이라고 해석할 수 있겠다.
3. 그래서 SparseArray 가 무엇인가?, SparseArray 를 왜 쓰는가?
SparseArray 란 Android 어플리케이션의 성능 향상을 위해 만들어진 데이터 구조라고 볼 수 있다. SparseArray 를 사용하는 것이 ArrayMap, HashMap 을 사용하는 것보다 메모리 효율성에서 더 뛰어나다고 한다.
SparseArray 의 키 값은 항상 primitive 타입이다. 그래서 키 값으로 primitive 타입을 사용하는 경우, HashMap 대신에 SparseArray 를 사용하여 메모리 낭비를 줄일 수 있다. 또한, SparseArray 는 Auto-Boxing 문제(https://android.jlelse.eu/autoboxing-a-little-thing-can-cause-big-problems-for-android-app-performance-1fb6cb1e48dd)를 제거하도록 설계되었기 때문에 ArrayMap, HashMap 보다 상대적으로 메모리를 적게 소모할 수 있다고 한다.
Continuous allocation and de-allocation of memory along with garbage collection will cause lag in Android application and it reduces the application performance. Other than this ArrayMap & SparseArray avoid memory problem by using 2 small arrays rather than one big one.
HashMap 대신 SparseArray 를 사용할 때의 장점:
· More memory efficient by using primitives (원시형 타입을 사용함으로써 메모리 효율성 증가)
· No auto-boxing (Auto-boxing 문제의 해결)
· Allocation-free
단점:
· For large collections, it is slower (인덱스 사이에 공간이 존재하는 만큼, 크기가 커지기 때문에 느리다)
· It only available for Android (안드로이드에서만 사용할 수 있다)
In general if inserts or deletes are fairly infrequent, and the number of items is < 1000 then ArrayMap / SparseArray classes are really good replacement classes.
4. SparseArray 를 어떻게 쓰는가?
1
2
3
4
5
6
7
8
9
10
11
12
|
private val DEFAULT_ORIENTATIONS = SparseIntArray().apply {
append(Surface.ROTATION_0, 90)
append(Surface.ROTATION_90, 0)
append(Surface.ROTATION_180, 270)
append(Surface.ROTATION_270, 180)
}
private val INVERSE_ORIENTATIONS = SparseIntArray().apply {
append(Surface.ROTATION_0, 270)
append(Surface.ROTATION_90, 180)
append(Surface.ROTATION_180, 90)
append(Surface.ROTATION_270, 0)
}
|
참고한 사이트 >>
https://developer.android.com/reference/android/util/SparseArray
https://android.jlelse.eu/app-optimization-with-arraymap-sparsearray-in-android-c0b7de22541a
https://developer88.tistory.com/91
https://log.hanjava.net/post/30231660090/map-hashmap-%EA%B7%B8%EB%A6%AC%EA%B3%A0-sparsearray
'Android' 카테고리의 다른 글
[Android] 안드로이드 - openCV 란 무엇인가 (0) | 2019.12.16 |
---|---|
[Android] 안드로이드 - VideoView 사용하기 참고예제 (0) | 2019.12.16 |
[Android] 안드로이드 - camera2 api 로 동영상을 촬영, 재생하며 생긴 코덱 문제 해결 방법 (0) | 2019.12.16 |
[Android] 안드로이드 - camera2 api 를 사용하여 동영상 촬영하는 앱 만들기 (feat. Kotlin) (0) | 2019.12.14 |
[Android] 안드로이드 - camera2 api를 사용해서 사진 촬영하는 앱 만들기 (feat. Kotlin) (1) | 2019.12.14 |