image

  • 가변 클래스(Mutable) : List, Set, Map
    • 컬렉션에 element를 추가, 삭제 할 수 있음
  • 불변 클래스(Immutable) : List, Set, Map
    • 컬렉션에 element를 추가, 삭제 불가
    • 불변 클래스이지만 Reference type인 element의 필드는 변경 가능
  • 코틀린에서는 뷸변/가변을 먼저 지정해 줘야 한다

1. List

final List<Interger> numbers = List.of(100, 200);

(1) List

val numbers = listOf(100, 200)
val emptyList = emptyList<Int>()  // 타입 추론 가능하면 generic 생략 가능

println(numbers[0])   // 100

for (num in numbers) {
  println(num)
}

for ((idx, value) in numbers.withIndex()) {
  println("${idx} ${value}")
}

(2) ImmutableList

val numbers = mutableListOf(100, 200)
numbers.add(300)

println(numbers[0])   // 100

for (num in numbers) {
  println(num)
}

for ((idx, value) in numbers.withIndex()) {
  println("${idx} ${value}")
}

2. Set

val numbers = setOf(100, 200)
val numbers2 = mutableSetOf(100, 200)

3. Map

  • map[key] = value 로 mutableMap에 값 할당 가능
  • put()도 사용 가능
// Mutable
val oldMap = mutableMapOf<Int, String>()
oldMap[1] = "Monday"
oldMap[2] = "Tueday"

// Immutable
mapOf(1 to "Monday", 2 to "Tueday")

for (key in oldMap.keys) {
  println(key)          // 1
  println(oldMap[key])  // "Monday"
}

for ((key, value) in oldMap.entries) {
  println(key)          // 1
  println(value)  // "Monday"
}

Collection의 nullable

  1. List<Int?> : element에 null을 넣을 수 있지만 List가 null이 될 수 없음
  2. List<Int>? : element로 null을 넣을 수 없지만 List가 null이 될 수 있음
  3. List<Int?>?: element로 null을 넣을 수 있고 List 자체도 null이 될 수 있음