안드로이드 개발자의 창고
[19일차 Kotlin] Map 본문
출처 : 안드로이드 앱스쿨 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 |