Kotlin은 프리미티브/래퍼 유형을 구분하지 않습니다.
- 정수, 부울 등
- Java와 달리 Kotlin에는 기본 유형과 래퍼 유형이 없습니다.
var list: List<Int> = listOf(1, 2, 3)
- Kotlin에서 모든 유형이 참조 유형으로 표시되는 것은 아닙니다.
가장 효율적인 방식
유형은 다음과 같이 표현됩니다.
- 대부분의 경우 Kotlin int 유형은 Java int 유형으로 컴파일됩니다.
- 컴파일이 불가능한 경우(제네릭 클래스)만 래퍼 유형(정수)으로 컴파일됩니다.
- 컬렉션의 유형 매개변수로 Int를 전달하면 Integer 객체가 입력됩니다.
null일 수 있는 유형
- 정수?, 부울?
- Kotlin에서 null일 수 있는 기본 유형을 사용하면 Java에서 래퍼 유형으로 컴파일됩니다.
- Java의 래퍼 유형은 null을 허용하므로 Kotlin의 null 허용 유형은 Java의 래퍼 유형과 동일합니다.
Kotlin은 모든 기본 유형(숫자 유형 변환)에 대한 변환 기능을 제공합니다.
- Java와 달리 Kotlin은 한 유형의 숫자를 다른 유형의 숫자로 자동 변환하지 않습니다.
- 결과 유형의 허용 개수 범위가 원본 유형보다 크더라도 자동 변환이 불가능합니다.
- 모든 기본형에 대한 변환 기능 제공
val i = 1
val l: Long = i (x, Error: type mismatch)
val l: Long = i.toLong() (o)
Kotlin의 특수 유형
- Any, Any?: 최상위 남자
- Java 객체와 마찬가지로 Kotlin의 Any 유형은 null을 허용하지 않는 유형의 조상입니다.
- 단원: 코틀린의 공허
- Java의 void와 동일
- void와 달리 Unit은 유형 매개변수로 사용할 수 있습니다.
interface Processor<T> {
fun process(): T
}
class NoResultProcessor : Processor<Unit> {
override fun process() {
// return을 명시할 필요가 없다.
컴파일러가 묵시적으로 return Unit을 넣어줌
}
}
- 아무것도 아님
- 함수가 정상적으로 종료되지 않음을 의미하는 Noting이라는 특별한 반환 유형이 있습니다.
fun fail(message: String): Nothing {
throw IllegalStateException(message)
}