1. 배열
보통 배열보다는 리스트를 사용하곤한다. 그래도 간단하게 자바와 비교하며 문법을 체크해보자.
val array = arrayOf(100, 200)
//0부터 마지막 index까지 for문을 돌림
for(i in array.indices){
println("$i ${array[i]}")
}
//쉽게 추가할 수 있음
array.plus(200)
//인덱스와 밸류를 한 번에 도출함
for((idx, value) in array.withIndex()){
println("${idx}, ${value}!")
}
배열도 마찬가지로 가변인지 불변인지 판별하는 val, var을 적어주어야하고, arrayOf( )라고 적는다.
이를 for문을 통해 배열안에 있는 값들을 출력할 때에는
array.indices를 통해 출력할 수 있다.
indices가 무엇인지 들어가보면 다음과 같다.
public val <T> Array<out T>.indices: IntRange
get() = IntRange(0, lastIndex)
즉, array에 있는 0번째 인덱스부터 마지막 인덱스까지의 범위를 의미한다.
따라서 i번째, array[i]값 처럼 출력이 가능하다!
또한, withIndex()로 인덱스값과 value값을 동시에 출력할 수도 있다!!
2. List, Set , Map
List
List, Set, Map은 이외에 말고도 Mutable이란 것을 붙여 활용할 수 있다.
Mutable은 컬렉션에 element를 추가, 삭제할 수 있는 가변을 의미하고,
아무것도 붙이지 않았을 때에는 추가, 삭제할 수 없는 불변을 의미한다.
하지만!! 불변컬렉션이라 하더라도 Reference Type인 Element의 필드는 바꿀 수 있다.
위의 예시를 살펴보자.
새로운 Money를 넣을 수 없고, 기존에 있던 Money를 삭제할 수도 없지만
Money에 접근해서 그 안에 있는 필드인 price인 값은 바꿀 수 있다!!
val numbers = listOf(100, 200)
val emptyList = emptyList<Int>() //비어있는 리스트를 만들 때는 타입을 적어주어야함
//바로 대괄호로 가져올 수 있음
println(numbers[0])
for(number in numbers){
println(number)
}
for((idx, value) in numbers.withIndex()){
println("${idx}, ${value}!")
}
리스트에서의 주의할 점은 emptyList를 만들때에는 무슨 타입인지 모르기 때문에 타입을 적어주어야한다!
for문을 통한 출력은 배열과 거의 같다고 볼 수 있다!
//가변리스트
val numbers1 = mutableListOf(100, 200)
numbers1.add(300)
가변리스트는 위와 같이 구현하며, add를 통해 값을 추가할 수 있다.
SET
Set의 가변으로는 MutableSetOf라고 적고, 기본 구현체는 LinkedHashSet이다. 사용은 리스트와 같다.
MAP
//map
val oldMap = mutableMapOf<Int, String>()
//가변맵이기 때문에 (key, value)를 넣을 수 있다.
//java처럼 put을 사용할 수 있고, 밑에처럼 map[key] = value를 쓸 수도 있다.
oldMap[1] = "MONDAY"
oldMap[2] = "MONDAY"
위와 같이 값을 정의하고 추가할 수 있지만 밑처럼 to를 통해 중위호출하여 값을 정의할 수 있다.
mapOf(1 to "MONDAY", 2 to "TUESDAY")
for문을 통한 출력은 array에서는 indices와, withIndex()가 있었지만
map에서는 keys와 entries가 존재한다!
for(key in oldMap.keys){
println(key)
println(oldMap[key])
}
for((key, value) in oldMap.entries){
println(key)
println(value)
}
3. 컬렉션의 null 가능성
/*
컬렉션의 null가능성
List<Int?> 리스트에 null이 들어갈 수 있지만, 리스트는 절대 null이 아님
List<Int>? 리스트에는 null이 들어갈 수 없지만, 리스트는 null일 수 있음
List<Int?>? 리스트에 null이 들어갈 수도 있고, 리스트가 null일 수도 있음
*/
위와 같이 세 가지의 경우가 있다. 이 경우가 좀 헷갈릴 수 있으니 꼭 알고 넘어가자!!
'Kotlin > Basic' 카테고리의 다른 글
[Kotlin/Basic] 코틀린에서의 다양한 함수 (1) | 2022.09.16 |
---|---|
[Kotlin/Basic] 코틀린에서의 중첩클래스 (0) | 2022.09.01 |
[Kotlin/Basic] 코틀린에서의 object 키워드 (0) | 2022.08.31 |
[Kotlin/Basic] 코틀린에서의 접근제어 (0) | 2022.08.23 |
[Kotlin/Basic] 코틀린에서의 상속 (0) | 2022.08.22 |