이동식 저장소

AndroidX Collection Library 본문

Primary/Android

AndroidX Collection Library

해스끼 2022. 12. 25. 11:27

이전에 불변하는 collection을 나타내는 Kotlin Immutable Collection을 공부했던 적이 있다. 

 

Kotlin Immutable Collections

GitHub - Kotlin/kotlinx.collections.immutable: Immutable persistent collections for Kotlin Immutable persistent collections for Kotlin. Contribute to Kotlin/kotlinx.collections.immutable development by creating an account on GitHub. github.com ``List``에

thinking-face.tistory.com

그런데 이번에는 Android Collection 라이브러리를 찾게 되었다. 이건 또 뭐람?

 

컬렉션  |  Android 개발자  |  Android Developers

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 컬렉션 소규모의 기존 컬렉션 및 새로운 컬렉션이 메모리에 미치는 영향을 줄입니다. 최근 업데이트 공개 버

developer.android.com

 

개요

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``를 사용한다.

 

실제 코드를 보면 자료구조 수업에서 과제로 낼 법한 코드와 비슷하다. 이런 특수 목적의 코드는 퀄리티보다 요구 사항을 제대로 반영했는지가 더 중요한 것 같다. 

결론

직접 사용할 일은 거의 없을 것 같지만, 구글 개발자들이 과제를 어떻게 수행하는지 엿볼 수 있었다. 그런데 개발 속도가 무지하게 느린 걸 보면 아마 최약체 개발자들이 쓴 코드가 아닌가 싶은데..... 이게 최약체라고?

 

반성합니다..


코드는 여기에서 볼 수 있다.

 

https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:collection/collection/src/commonMain/kotlin/androidx/collection/CircularArray.kt

 

cs.android.com

 

Comments