본문 바로가기
Android/Kotlin

[Android/Kotlin] mutableMapOf vs hashMapOf 차이점 및 성능 비교

by quessr 2025. 2. 6.

 

Kotlin에서 Map을 사용할 때 mutableMapOfhashMapOf 중 어떤 것을 선택하는 것이 더 좋을까요? 이번 글에서는 두 가지의 차이점과 성능 비교를 통해 언제 어떤 것을 선택하면 좋은지를 알아보겠습니다.


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를 사용하는 것이 적절합니다. 

반응형