인프런에서 제공하고 있는 강의를 보고 정리한 글입니다.
배열
배열은 사실 잘 사용하지 않는다. 배열보다는 List를 사용하는 것을 Effective Java 에서도 권장하고 있다.
fun main() {
val array = arrayOf(100, 200)
// 0 부터 마지막 index 까지 for문으로 돌릴 수 있다
for (i in array.indices) {
println("${i} #{array[i]}")
}
// index 와 value 를 한번에 받기
for ((idx, value) in array.withIndex()) {
println("$idx $value")
}
}
코틀린에서의 Collection - List, Set, Map
컬렉션을 만들어줄 때에는, 불변인지, 가변인지를 설정해야 한다.
가변 컬렉션 : 컬렉션에 element 를 추가, 삭제할 수 있다.
불변 컬렉션 : 컬렉션에 element 를 추가, 삭제할 수 없다. 단, 불변 컬렉션이라고 하더라도, Reference Type 인 Element 의 필드는 바꿀 수 있다.
List
fun main() {
val numbers = listOf(100, 200)
// empty list. 비어있는 리스트를 만들 때에는 들어가야할 타입을 명시적으로 적는다
val emptyList = emptyList<Int>()
// 단 파라미터에서 추론이 가능하면 생략 가능하다.
printNumbers(emptyList())
}
private fun printNumbers(numbers: List<Int>) {
}
for문 및 접근하는 경우, 다음과 같이 한다.
fun main() {
val numbers = listOf(100, 200)
println(numbers[0])
for (number in numbers) {
println(number)
}
for ((idx, value) in numbers.withIndex()) {
println("$index $number")
}
}
가변 리스트를 만들고자 할 때에는 다음과 같이 추가한다. 기본 구현체는 ArrayList
이다.
val numbers = mutableListOf(100, 200)
numbers.add(300)
Set
val set = mutableSetOf(100, 200)
Map
val oldMap = mutableMapOf<Int, String>()
oldMap.put(1, "MONDAY")
oldMap[2] = "TUESDAY"
mapOf(1 to "MONDAY", 2 to "TUESDAY")
map 활용 방법은 다음과 같다.
for (key in oldMap.keys) {
println(key)
println(oldMap.get(key))
println(oldMap[key])
}
for ((key, value) in oldMap.entries) {
println(key)
println(value)
}
컬렉션의 null 가능성, Java 와 함께 사용하기
다음과 같은 경우, 미묘하게 조금씩 null 가능성이 바뀐다.
List<Int?>
: 리스트에 null 이 들어갈 수 있지만, 리스트는 절대 null 이 아니다.List<Int>?
: 리스트에 null 이 들어갈 수 없지만, 리스트는 null 일 수 있다.List<Int?>?
: 리스트, 리스트에 모두 null 허용이다.
자바의 경우, 읽기 전용 컬렉션, 변경 가능 컬렉션을 구분하지 않는다.
자바는 nullable, non-nullable 을 구분하지 않는다.
Kotlin 쪽의 컬렉션이 Java 에서 호출되면, 컬렉션 내용이 변할수 있음을 감안해야한다. 이것을 생각해서 예외코드 처리를 해줘야 할 필요가 있다. 아니면 코틀린 쪽에서 Collections.unmodifableXX
API 를 활용해서 변경 자체를 막을 수도 있다.
Kotlin 에서 Java 컬렉션을 가져다 사용할 때, 플랫폼 타입을 신경 써야한다.
'[ Kotlin ]' 카테고리의 다른 글
코틀린에서 컬렉션을 함수형으로 다루는 방법 -18강 (0) | 2024.08.29 |
---|---|
코틀린에서 함수 및 람다를 다루는 방법 - 16강, 17강 (0) | 2024.08.28 |
코틀린에서 다양한 클래스를 다루는 방법 - 14강 (0) | 2024.08.28 |
코틀린에서 중첩 클래스를 다루는 방법 - 13강 (0) | 2024.08.28 |
코틀린에서 object 키워드를 다루는 방법 - 12강 (1) | 2024.08.28 |