컬렉션을 읽기 전용(read-only)과 변경 가능한(mutable) 두 가지로 관리
- 읽기 전용 컬렉션은 한 번 생성된 이후에는 수정할 수 없음
- 변경 가능한 컬렉션은 생성 후에 요소를 추가하거나 제거하는 등의 수정이 가능
읽기 전용 컬렉션
읽기 전용 컬렉션은 수정할 수 없는 컬렉션입니다. 컬렉션을 생성할 때 listOf(), setOf(), mapOf()와 같은 함수를 사용하여 만들 수 있습니다. 읽기 전용 컬렉션은 요소를 읽는 것만 가능하고, 추가하거나 삭제하는 것은 불가능합니다.
fun main() {
val listOfNumbers = listOf(1, 2, 3)
println(listOfNumbers[1]) // 2
// listOfNumbers.add(4) // ERROR: 읽기 전용 컬렉션에는 요소를 추가할 수 없음
val setOfNumbers = setOf(1, 2, 3)
// setOfNumbers.add(4) // ERROR: 읽기 전용 컬렉션에는 요소를 추가할 수 없음
val mapOfNumbers = mapOf(1 to "one", 2 to "two", 3 to "three")
// mapOfNumbers.put(4, "four") // ERROR: 읽기 전용 컬렉션에는 요소를 추가할 수 없음
}
변경 가능한 컬렉션
변경 가능한 컬렉션은 요소를 추가하거나 제거할 수 있는 컬렉션입니다. mutableListOf(), mutableSetOf(), mutableMapOf()와 같은 함수를 사용하여 생성할 수 있습니다.
fun main() {
val mutableListOfNumbers = mutableListOf(1, 2, 3)
mutableListOfNumbers.add(4) // OK: 변경 가능한 리스트에 요소 추가 가능
println(mutableListOfNumbers) // [1, 2, 3, 4]
val mutableSetOfNumbers = mutableSetOf(1, 2, 3)
mutableSetOfNumbers.add(4) // OK: 변경 가능한 셋에 요소 추가 가능
println(mutableSetOfNumbers) // [1, 2, 3, 4]
val mutableMapOfNumbers = mutableMapOf(1 to "one", 2 to "two")
mutableMapOfNumbers[3] = "three" // OK: 변경 가능한 맵에 요소 추가 가능
println(mutableMapOfNumbers) // {1=one, 2=two, 3=three}
}
읽기 전용 컬렉션을 변경 가능한 컬렉션으로 변환
기존의 읽기 전용 컬렉션을 변경 가능한 컬렉션으로 변환할 수 있습니다. 이 경우 toMutableList(), toMutableSet(), toMutableMap() 메서드를 사용합니다.
fun main() {
val listOfNumbers = listOf(1, 2, 3)
val mutableListOfNumbers = listOfNumbers.toMutableList()
mutableListOfNumbers.add(4) // OK: 읽기 전용 리스트를 변경 가능한 리스트로 변환 후 수정 가능
println(mutableListOfNumbers) // [1, 2, 3, 4]
val setOfNumbers = setOf(1, 2, 3)
val mutableSetOfNumbers = setOfNumbers.toMutableSet()
mutableSetOfNumbers.add(4) // OK: 읽기 전용 셋을 변경 가능한 셋으로 변환 후 수정 가능
println(mutableSetOfNumbers) // [1, 2, 3, 4]
val mapOfNumbers = mapOf(1 to "one", 2 to "two")
val mutableMapOfNumbers = mapOfNumbers.toMutableMap()
mutableMapOfNumbers[3] = "three" // OK: 읽기 전용 맵을 변경 가능한 맵으로 변환 후 수정 가능
println(mutableMapOfNumbers) // {1=one, 2=two, 3=three}
}
요약
- 읽기 전용 컬렉션: listOf(), setOf(), mapOf()로 생성. 수정할 수 없음.
- 변경 가능한 컬렉션: mutableListOf(), mutableSetOf(), mutableMapOf()로 생성. 수정 가능.
- 변환: toMutableList(), toMutableSet(), toMutableMap()을 사용하여 읽기 전용 컬렉션을 변경 가능한 컬렉션으로 변환 가능.
'코틀린' 카테고리의 다른 글
[코틀린 Kotlin] GroupBy 함수 (2) | 2024.09.08 |
---|---|
[코틀린 Kotlin] `?:` 엘비스 연산자 vs `?.let` - null 일 때 대체값 vs null이 아닐 때 반환값 (0) | 2024.09.08 |
[코틀린 Kotlin] StringBuilder - 문자열 수정/결합 시 기존 버퍼를 수정하는 클래스 (1) | 2024.09.07 |
[코틀린 Kotlin] lines - 줄 단위로 split 하여 리스트로 반환 (0) | 2024.09.07 |
[코틀린 Kotlin] 조건식, 변수 값 비교에 따른 when 표현식 (0) | 2024.09.07 |