(Kotlin) Kotlin 데이터 유형

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)
}