맵 Map
맵은 키-값 쌍으로 이뤄진 컬렉션입니다. 각 키는 고유해야 하고, 쌍으로 연결된 값을 가져올 때 사용합니다. 맵을 만들려면 mapOf()나 mutableMapOf() 함수를 씁니다. 중위함수 to를 쓰면 좀 더 간결하게 맵을 만들 수 있습니다. 변경가능(mutable) 맵의 읽기전용 뷰를 얻으려면 Map으로 캐스팅하면 됩니다.
const val POINTS_X_PASS: Int = 15
val EZPassAccounts: MutableMap<Int, Int> = mutableMapOf(1 to 100, 2 to 100, 3 to 100) // 1
val EZPassReport: Map<Int, Int> = EZPassAccounts // 2
fun updatePointsCredit(accountId: Int) {
if (EZPassAccounts.containsKey(accountId)) { // 3
println("업데이트 $accountId...")
EZPassAccounts[accountId] = EZPassAccounts.getValue(accountId) + POINTS_X_PASS // 4
} else {
println("에러: 계정이 없습니다 (id: $accountId)")
}
}
fun accountsReport() {
println("EZ-Pass 현황:")
EZPassReport.forEach { // 5
k, v -> println("ID $k: 포인트 $v")
}
}
fun main() {
accountsReport() // 6
updatePointsCredit(1) // 7
updatePointsCredit(1)
updatePointsCredit(5) // 8
accountsReport() // 9
}
- 변경가능
Map을 만들었습니다. - 그
Map의 읽기전용 뷰를 만들었습니다. Map에 이미 해당 키가 있는지 확인합니다.- 해당하는 값을 읽어서 상수를 더합니다.
- 불변
Map의 모든 요소에 대해 키-값 쌍을 프린트합니다. - 업데이트에 앞서, 계정 잔액을 확인해 둡니다.
- 기존 계정을 두 번 업데이트합니다.
- 계정을 없는데 업데이트하려면 에러 메시지가 프린트됩니다.
- 업데이트를 끝내고 나서, 계정 잔액을 확인합니다.