Kotlin : 배열과 컬렉션

정종욱·2023년 7월 6일
0

Kotlin

목록 보기
15/16
post-thumbnail

배열

val array = arrayOf(100, 200)

for (i in array.indices) { } // 인덱스만
for ((idx, value) in array.withIndex()) { } // 인덱스와 값 모두

Collection

가변 불변

MutableList<Type> // 가변리스트
List<Type> // 불변리스트

가변 컬렉션과 불변 컬렉션이 존재한다. 불변컬렉션은 내부적으로 Collection 을 만들자마자 Collections.unmodifiableList() 등을 붙여준다.

불변 컬렉션은 정말 값 수정이 불가능한가?
정답은 No 다. 추가, 삭제가 불가능한 것이지 Reference Type 인 Element 의 필드는 바꿀 수 있다.

ex)

class Money (
	val price
)

val moneyList: List<Money> = ...
moneyList.plus(money) // 불가
moneyList[0].price = 4000 // 가능
👏 TIP
가변 컬렉션 (Mutable) : 컬렉션에 element 추가, 삭제 가능
불변 컬렉션 : 가변 컬렉션의 반대

List

val numberList = listOf(...) // 리스트
val emptyList = emptyList<Type>() // 빈 리스트
val mutableList = mutableListOf(...) // 가변 리스트
  • 값이 추론 가능하다면 emptyList 에 타입을 넣지 않아도 된다.

  • listOf() 는 기본적으로 불변이다.

  • 가변 리스트를 사용하고싶다면 mutableListOf() 를 사용하면 된다.

    numberList[0]

    .get(0) 이 아닌 대괄호로 특정 인덱스의 값을 가져올 수 있다.

Set

val numberSet = setOf(...)
val mutableNumberSet = mutableSetOf(...)
  • set 또한 리스트와 사용 방법이 동일하다
  • for 문 또한 리스트와 동일하다
  • mutableSet 의 기본 구현체는 LinkedHashSet 이다.

Map

val map = mutableMapOf<KeyType, ValueType>()

map[0] = "MONDAY"
map[1] = "TUESDAY"

mapOf(1 to "MONDAY", 2 to "TUESDAY")

for (key in map.keys) { }
for ((key, value) in map.entires) { }
  • 특정 idx 에 값을 추가하면 된다. (=자바의 put)
  • 중위 호출 방법으로 값을 한번에 넣을 수 있다.
  • for 문은 리스트와 약간 다르다.

컬렉션의 null 가능성

👏 TIP
List<Int?> : 리스트에 null 이 들어갈 수 있음, 리스트는 not null
List<Int>? : 리스트에  이 들어갈 수 없음, 리스트는 null 가능
List<Int?>? : 리스트에 null 이 들어갈 수 있음, 리스트도 null 가능 

? 의 위치에 따라 의미가 달라지므로 차이를 잘 이해해야한다.

자바는 nullable 타입과 non-nullable 타입을 구분하지 않아 코틀린과 같이 쓸 때 주의하여야 한다.

코틀린에서 자바컬렉션을 가져다 사용할 때는 플랫폼 타입(= Type?)을 신경써야한다. 자바코드를 보며 맥락을 확인하고 Wrapping 을 해야한다.

0개의 댓글

관련 채용 정보