Archives
Recent Posts
«   2024/10   »
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 31
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[19일차 Kotlin] Map 본문

Computer/Kotlin

[19일차 Kotlin] Map

Wise-99 2023. 5. 24. 11:30

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 Map

  • 객체를 이름을 통해 관리하는 컬렉션
  • map은 순서 개념이 없다.
  • 메모리에 저장할 때 순차적으로 저장되어 출력해보면 그대로 출력되지만 사용할 때 인덱스의 개념이 없기 때문에 순서의 개념이 없다고 정의한다.

 

 

 

📖 예제 코드

1. Map 생성

fun main(){
    val map1 = mapOf("key1" to 10, "key2" to 20, "key3" to 30)
    println("map1 : $map1") // {key1=10, key2=20, key3=30}
    
    val map2 = mapOf(10 to "str1", 20 to "str2", 30 to "str3")
    println("map2 : $map2") // {10=str1, 20=str2, 30=str3}

    val map3 = mutableMapOf("key1" to 10, "key2" to 20, "key3" to 30)
    println("map3 : $map3") // {key1=10, key2=20, key3=30}
    
    val map4 = mapOf<String, Any>("key1" to 10, "key2" to 11.11)
    println("map4 : $map4")
}
  • Key to Value(값 또는 객체)
  • key는 꼭 문자열이 아니어도 된다.
  • mapOf : 불변형 Map을 생성한다.
  • mutableMapOf : 가변형 Map을 생성한다.
  • 만약 Key나 Value의 타입이 다양하게 저장된다면 map의 Generic을 Any로 설정해준다.

2. 비어있는 Map

fun main(){
    val map5 = mapOf<String, Int>()
    val map6 = mutableMapOf<String, Int>()
}
  • 비어있는 map을 만들 때는 값이 없기 때문에 제네릭을 자동으로 설정할 수 없다.
  • 따라서 Generic을 무조건 작성해줘야 한다.

3. 객체, 값 가져오기

fun main(){
    val map7 = mapOf("key1" to 10, "key2" to 20, "key3" to 30)
    val map8 = mutableMapOf("key1" to 10, "key2" to 20, "key3" to 30)

    println("map7 key1 : ${map7.get("key1")}") // 10
    println("map8 key1 : ${map8.get("key1")}") // 10

    println("map7 key2 : ${map7["key2"]}") // 20
    println("map8 key2 : ${map8["key2"]}") // 20
}
  • get : 이름을 통해 객체를 추출할 수 있다.
  • Kotlin의 Map은  [ ]를 사용할 수 있다.

4. 기타 메서드

fun main(){
    val map1 = mapOf("key1" to 10, "key2" to 20, "key3" to 30)

    println("map1 size : ${map1.size}") //3

    println("map1 keys : ${map1.keys}") // [key1, key2, key3]

    println("map1 values : ${map1.values}") // [10, 20, 30]

    println("map1 contains key - key1 : ${map1.containsKey("key1")}") // true
    println("map1 contains key - key100 : ${map1.containsKey("key100")}") // false

    println("map1 contains value - 10 : ${map1.containsValue(10)}") // true
    println("map1 contains value - 100 : ${map1.containsValue(100)}") // false
}
  • size : 관리하는 요소의 개수
  • keys : Key를 배열로 반환한다.
  • values : Value(객체)을 배열로 반환한다.
  • containsKey : 지정된 Key로 저장된 객체가 있는지 확인한다.
  • containsValue : 지정된 Value로 저장된 객체가 있는지 확인한다.

5. 가변형 Map의 추가, 수정, 삭제

fun main(){
    val map9 = mutableMapOf("a1" to 10, "a2" to 20)
    println("map9 : $map9") // {a1=10, a2=20}

    // 추가
    map9.put("a3", 30)
    println("map9 : $map9") // {a1=10, a2=20, a3=30}

    map9["a4"] = 40
    println("map9 : $map9") // {a1=10, a2=20, a3=30, a4=40}

    // 수정
    map9["a1"] = 100
    println("map9 : $map9") // {a1=100, a2=20, a3=30, a4=40}

    // 삭제
    map9.remove("a1")
    println("map9 : $map9") // {a2=20, a3=30, a4=40}
}
  • put : 객체를 추가한다. 기존 이름과 동일할 경우 덮어씌운다.([ ] 사용 가능)
  • remove : 주어진 Key로 저장된 객체를 제거한다.

6. map <-> mutableMap

fun main(){
    val map10 = mapOf("a1"  to 10, "a2" to 20, "a3" to 30)

    val map11 = map10.toMutableMap()
    map11["a4"] = 40
    println("map11 : $map11") // {a1=10, a2=20, a3=30, a4=40}

    val map12 = map11.toMap()
    map12["a5"] = 50    <<< 오류 발생
}

 

  • toMap : 불변형 Map을 생성해 반환한다.
  • toMutableMap : 가변형 Map을 생성해 반환한다.
  • map12["a5"] = 50 : 가변형 Map에서 불변형 Map으로 변환했기 때문에 값을 추가하는 것은 불가능하다.

'Computer > Kotlin' 카테고리의 다른 글

[20일차 Kotlin] 스레드(Thread)  (0) 2023.05.24
[20일차 Kotlin] 예외처리(try - catch)  (0) 2023.05.24
[19일차 Kotlin] Set  (0) 2023.05.24
[19일차 Kotlin] List  (0) 2023.05.24
[19일차 Kotlin] 문자열(String, StringBuffer)  (0) 2023.05.24