Map 자료구조
Map은 Key, Value(키 - 값)를 정의할 때 쓰이는 자료구조입니다.
파이썬의 딕셔너리, JSON을 떠올리면 쉬울 텐데요.
Key를 통해 Value에 접근하거나 검색, 수정, 삭제 등 접근을 할 수 있으며,
Key를 통해 접근하므로, Key는 중복이 불가능하며, Value는 중복이 가능합니다.
Map 사용법
fun main() {
val map = mapOf<String, String>("키1" to "값1", "키2" to "값2", "키3" to "값3")
map["키1"] = "값2" // 에러 발생
val map2 = mutableMapOf<String, String>("키1" to "값1", "키2" to "값2", "키3" to "값3")
map2["키1"] = "값2" // 가능
// MapOf로 생성 시, 자료형 생략 가능
val map3 = mutableMapOf("키1" to "값1", "키2" to "값2", "키3" to "값3")
}
맵 자료구조는 Map<키 자료형, 값 자료형>으로 나타내며,
mapOf로 생성과 초기화를 동시에 할 수 있습니다.
키 - 값 관계는 앞서 본 infix 함수인 to를 사용해 나타낼 수 있습니다.
Map 역시 list, set과 마찬가지로 불변/가변으로 나눠집니다.
불변은 당연하게도 새로운 값의 할당이 불가능하며,
mutableMap을 사용했을 때만 새로운 값의 할당이 가능합니다.
val map = mapOf<String, Int>()
val map = mutableMapOf<String, Int>()
빈 Map을 생성하고 싶을 땐 위와 같이 () 안에 아무것도 넣어주지 않으면 됩니다.
fun main() {
val map = mutableMapOf<String, Int>()
map["a"] = 1
map["b"] = 2
map["c"] = 3
println(map["a"])
println(map["b"])
map["a"] = 4
println(map["a"])
println(map.getOrDefault("d", 0))
}
// 출력
1
2
4
0
Map의 경우 위와같이 map[key]를 통해 접근이 가능하며,
존재하지 않는 키에 접근하려 하면 에러가 발생합니다.
존재하지 않을 수도 있는 키에 접근하려면 getOrDefault를 사용하는데,
만약 키가 존재하지 않을 경우의 디폴트값을 지정해 넘겨받을 수 있습니다.
Map과 for 반복문
fun main() {
val map = mapOf(1 to "one", 2 to "two", 3 to "three")
for ((key, value) in map) {
println("키 = $key, 값 = $value")
}
}
// 출력
키 = 1, 값 = one
키 = 2, 값 = two
키 = 3, 값 = three
Map을 사용해 반복문을 돌리고 싶을 땐, 위와 같이 사용이 가능합니다.
fun main() {
val map = mapOf(1 to "one", 2 to "two", 3 to "three")
map.forEach { (k, v) ->
println("$k -> $v")
}
}
혹은 위와 같이 forEach를 사용할 수도 있습니다.
인자는 key, value 순 입니다.
'코틀린 파헤치기 > 3부. 코틀린 고급' 카테고리의 다른 글
[코파기 3부] 10. 코틀린과 꼬리재귀와 tailrec (0) | 2023.07.25 |
---|---|
[코파기 3부] 9. 코틀린과 컬렉션 프레임워크 (3) : 컬렉션 + 람다식 (0) | 2023.03.27 |
[코파기 3부] 7. 코틀린과 컬렉션 프레임워크 (1) : Set (0) | 2023.03.27 |
[코파기 3부] 6. 코틀린과 함수형 프로그래밍 (2) : 람다식 (0) | 2023.03.24 |
[코파기 3부] 5. 코틀린과 함수형 프로그래밍 (1) : 함수형 프로그래밍이란? (0) | 2023.03.24 |