Kotlin에서 Map을 사용할 때 mutableMapOf와 hashMapOf 중 어떤 것을 선택하는 것이 더 좋을까요? 이번 글에서는 두 가지의 차이점과 성능 비교를 통해 언제 어떤 것을 선택하면 좋은지를 알아보겠습니다.
1. mutableMapOf vs hashMapOf 차이점
mutableMapOf
val sitesAndPasswords = mutableMapOf<String, String>()
- 내부적으로 LinkedHashMap을 사용합니다.
- 입력 순서를 유지하는 특징이 있습니다.
- 성능은 일반적인 HashMap과 동일 (O(1) 조회, 삽입 가능).
hashMapOf
val sitesAndPasswords = hashMapOf<String, String>()
- 명시적으로 HashMap을 사용합니다.
- 입력 순서를 유지하지 않음 (순서가 중요하지 않다면 더 적합).
- 성능은 mutableMapOf와 동일 (O(1) 조회, 삽입 가능).
2. 성능 비교 (O(1))
두 방식 모두 기본적으로 HashMap 기반이므로 조회(get), 삽입(put) 연산이 평균적으로 O(1)입니다.
연산mutableMapOf (LinkedHashMap)hashMapOf (HashMap)
삽입 (put) | O(1) (평균적으로) | O(1) (평균적으로) |
조회 (get) | O(1) | O(1) |
삭제 (remove) | O(1) | O(1) |
입력 순서 유지 | ✅ 유지됨 | ❌ 유지되지 않음 |
3. 어떤 걸 선택하는 게 더 좋은가?
선택 기준 | mutableMapOf | hashMapOf |
내부 구조 | LinkedHashMap | HashMap |
입력 순서 유지 | ✅ 유지됨 | ❌ 유지되지 않음 |
성능 (O(1)) | ✅ 동일 | ✅ 동일 |
명시성 (HashMap 사용 여부) | ❌ 모호할 수 있음 | ✅ 더 직관적 |
4. 실제 코드에서 적용 예시
mutableMapOf (입력 순서 유지 필요할 때)
val sitesAndPasswords = mutableMapOf<String, String>()
sitesAndPasswords["acmicpc.net"] = "UAENA"
sitesAndPasswords["google.com"] = "qwerty"
println(sitesAndPasswords) // {acmicpc.net=UAENA, google.com=qwerty} (입력 순서 유지)
hashMapOf (순서 필요 없을 때 → 더 추천!)
val sitesAndPasswords = hashMapOf<String, String>()
sitesAndPasswords["acmicpc.net"] = "UAENA"
sitesAndPasswords["google.com"] = "qwerty"
println(sitesAndPasswords) // {google.com=qwerty, acmicpc.net=UAENA} (순서 무작위)
5. 결론: 언제 hashMapOf를 선택해야 할까?
일반적으로 hashMapOf를 사용하는 것이 더 직관적이고 효율적입니다.
- 입력 순서가 중요하다면? → mutableMapOf (내부적으로 LinkedHashMap 사용)
- 순서가 중요하지 않다면? → hashMapOf (더 명확하고 추천)
- 성능은 동일 (O(1))이지만, hashMapOf는 순서가 필요 없는 경우 더 가볍고 직관적
특별한 이유가 없다면 hashMapOf를 사용하는 것이 명확하고 직관적인 선택입니다.
하지만, 데이터가 입력 순서를 유지해야 하는 경우라면 mutableMapOf를 사용하는 것이 적절합니다.
반응형
'Android > Kotlin' 카테고리의 다른 글
[Android/Kotlin] Kotlin 컬렉션 확장 함수 정리: associateBy 사용법 (0) | 2025.03.27 |
---|---|
[Android/Kotlin] lateinit 이해하기: nullable과의 차이와 지연 초기화 이해하기 (0) | 2025.02.25 |
[Android/Kotlin] fold 사용법과 예제 (0) | 2025.02.05 |
[Android/Kotlin] 코틀린의 mutableMapOf()는 왜 LinkedHashMap을 사용할까? (0) | 2025.02.04 |
[Android/Kotlin] 코틀린 컬렉션 함수: any와 all (0) | 2025.01.21 |