Int
는 널이 될 수 없는 타입이므로, Java에서의 int
로 쉽게 컴파일 가능Integer
으로 컴파일된다.toString
, equals
, hashCode
메소드가 기본 구현 되어있다.Any
타입은 java.lang.Object
에 대응Object
인자를 받거나 반환하면, Kotlin에서는 Any
타입으로 취급한다.Any!
로 인식한다.interface Processor<T> {
fun process(): T
}
class NoResultProcessor: Processor<Unit> {
override fun process() {
// ...
}
}
Unit
타입에 속한 값은 단 하나 뿐이며, 그이름도 Unit 이다.Unit
타입의 함수는 묵시적으로 return Unit
처럼 Unit 값을 반환한다.return Unit
을 넣어준다.Nothing
은 함수의 반환 타입이나 반환 타입으로 쓰일 타입 파라미터로만 쓸 수 있다.fun fail(message: String): Nothing {
throw IllegalStateException(message)
}
fun main(args: Array<String>) {
fail("Error occurred")
}
// Exception in thread "main" java.lang.IllegalStateException: Error occurred
fun readNumbers(reader: BufferedReader): List<Int?> {
val result = ArrayList<Int?>()
for (line in reader.lineSequence()) {
val number = line.toIntOrNull()
result.add(number)
}
return result
}
fun addValidNumbers(numbers: List<Int?>) {
val validNumbers = numbers.filterNotNull()
println("Sum of valid numbers: ${validNumbers.sum()}")
println("Invalid numbers: ${numbers.size - validNumbers.size}")
}
fun main(args: Array<String>) {
val reader = BufferedReader(StringReader("1\nabc\n42"))
val numbers = readNumbers(reader)
addValidNumbers(numbers)
}
// Sum of valid numbers: 43
// Invalid numbers: 1
Collection Type | Immutable | Mutable |
---|---|---|
List | listOf | mutableListOf, arrayListOf |
Set | setOf | mutableSetOf, hashSetOf, linkedSetOf, sortedSetOf |
Map | mapOf | mutableMapOf, hashMapOf, linkedMapOf, sortedMapOf |
자바 코드에서 정의한 타입을 코틀린 컴파일러는 플랫폼 타입으로 간주한다.
컬렉션 타입이 Signature에 들어간 자바 메소드 구현을 할때, Kotlin에서 사용할 컬렉션 타입을 선택해야 한다.
1. 컬렉션 자체가 널이 될 수 있는가?
2. 컬렉션의 원소가 널이 될 수 있는가?
3. 컬렉션이 Mutable한가?
fun main(args: Array<String>) {
println(arrayOf(1, 2, 3, 4).contentToString())
println(arrayOfNulls<Int>(5).contentToString())
println(Array(5) { it + 1 }.contentToString())
println(intArrayOf(1,2,3).contentToString())
println(IntArray(4).contentToString())
println(IntArray(5) { it * it }.contentToString())
}
// [1, 2, 3, 4]
// [null, null, null, null, null]
// [1, 2, 3, 4, 5]
// [1, 2, 3]
// [0, 0, 0, 0]
// [0, 1, 4, 9, 16]
toTypedArray()
fun main(args: Array<String>) {
val strings = listOf("a", "b", "c")
println("%s/%s/%s".format(*strings.toTypedArray()))
}
vararg
fun main(args: Array<String>) {
println(customList(listOf(2, 3, 4))) // 10
println(customVarg(1, 2, 3)) // 7
}
fun customList(list: List<Int>) = customVarg(*list.toIntArray())
fun customVarg(vararg args: Int) = customVararg2(1, *args)
fun customVararg2(vararg args: Int) = args.sum()
*
Array<T>
, IntArray
, LongArray
, DoubleArray
. ByteArray
, CharArray
, ShortArray
FloatArray
, StringArray
, BooleanArray
Array
에만 사용 가능List
의 경우 toArray
메서드 적용 후, 사용 가능fun main(args: Array<String>) {
val list = listOf("args", *args)
println(list)
}