일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Hilt
- MiTweet
- android
- Rxjava
- textfield
- 코루틴
- architecture
- MyVoca
- activity
- boj
- Python
- Coroutines
- GitHub
- 암호학
- Gradle
- 백준
- Coroutine
- livedata
- ProGuard
- AWS
- Codeforces
- Compose
- pandas
- 코드포스
- 쿠링
- 프로그래머스
- androidStudio
- TEST
- Kotlin
- relay
- Today
- Total
이동식 저장소
AndroidX Collection Library 본문
이전에 불변하는 collection을 나타내는 Kotlin Immutable Collection을 공부했던 적이 있다.
그런데 이번에는 Android Collection 라이브러리를 찾게 되었다. 이건 또 뭐람?
개요
Reduce the memory impact of existing and new collections that are small
Java와 Kotlin에 존재하는 collection을 개량하여 메모리 사용량을 줄인 라이브러리다. 메모리 성능이 개선된 대신 시간 성능이 희생되었다. 예를 들면 ``androidx.collection.ArraySet``은 배열과 이진 탐색을 사용하여 데이터를 저장하므로 상수 시간에 값을 검색하는 일반적인 Set보다 느리다.
일반적인 환경에서 메모리를 이렇게까지 아낄 필요는 없다. 아마도 메모리가 매우 부족한 임베디드용 라이브러리가 아닌가 싶다.
주요 클래스
ArraySet, ArrayMap
각각 ``java.util.Set``과 ``Map``에 대응된다. 위에서 말했던 것처럼 배열과 이진 탐색을 이용하여 값을 저장한다.
SparseArrayCompat, LongSparseArray
Key로 각각 ``int``와 ``long``을 사용하는 map 클래스이다. ``int`` 같은 Java primitive 타입은 제네릭으로 사용될 때 ``Integer`` 등의 클래스로 boxing되는데, ``SparseArrayCompat``과 ``LongSparseArray``는 타입을 boxing하지 않기 때문에 메모리 사용량을 줄일 수 있다.
얘들도 배열을 쓴다. 그것도 ``Array``가 아닌 ``int[]`` 같은 진짜 primitive 배열을 써서 저장한다.
LruCache
운영체제를 공부한 적이 있다면 Cache의 swap 방법 중 LRU(Least Recently Used)를 알고 있을 것이다. LruCache 클래스는 LRU를 적용한 캐시를 구현한 클래스이다.
CircularArray, CircularIntArray
랜덤 액세스, 맨 앞에 삽입, 맨 뒤에 삽입 연산을 모두 상수 시간에 수행할 수 있는 자료구조이다. 이름에 circular가 들어간 이유는 배열이 꽉 찼을 때 ``head == tail``이 되기 떄문에 넣은 듯하다. 내부적으로 각각 ``Array<E>``와 ``IntArray``를 사용한다.
실제 코드를 보면 자료구조 수업에서 과제로 낼 법한 코드와 비슷하다. 이런 특수 목적의 코드는 퀄리티보다 요구 사항을 제대로 반영했는지가 더 중요한 것 같다.
결론
직접 사용할 일은 거의 없을 것 같지만, 구글 개발자들이 과제를 어떻게 수행하는지 엿볼 수 있었다. 그런데 개발 속도가 무지하게 느린 걸 보면 아마 최약체 개발자들이 쓴 코드가 아닌가 싶은데..... 이게 최약체라고?
반성합니다..
코드는 여기에서 볼 수 있다.
'Primary > Android' 카테고리의 다른 글
Android Studio Giraffe 신기능 정리 (0) | 2023.02.18 |
---|---|
App Startup (0) | 2023.01.25 |
[Android] Gradle Managed Devices로 테스트하기 (0) | 2022.12.08 |
[Android Studio] Flamingo 신기능 정리 (0) | 2022.12.07 |
[Android Studio] Electric Eel 신기능 정리 (0) | 2022.12.04 |