Hanbit the Developer

Kotlin Documentation | Types 본문

Mobile/Kotlin

Kotlin Documentation | Types

hanbikan 2023. 5. 22. 14:10

Kotlin Documentation 시리즈에 대해

Category: Concepts

문서 링크: https://kotlinlang.org/docs/basic-types.html


*Kotlin은 Java였다면 primitive로 표현될 수 있는 값을 포함하여, 모두 객체로 취급한다.(Int, Double, Boolean) 이를 통해 일관성있고 널 세이프티하며 각 타입들에 대해 추가 기능들을 제공할 수 있다. 다만 이렇게 함으로써 발생하는 성능 저하 문제를 최소화하기 위해 boxing, unboxing을 이용한다. 코틀린 컴파일러가 각 상황에 맞게 연산들을 boxing, unboxing하기 때문에 퍼포먼스 차이는 무시할만하다.(ChatGPT)

 

Numbers

  • 타입 추론: 명시하지 않는 경우 컴파일러가 값으로 추론하여 가장 작은 범위의 타입을 넣어줌
val one = 1 // Int
val threeBillion = 3000000000 // Long
val oneLong = 1L // Long
val oneByte: Byte = 1
  • 선언
    • Decimals: 123
    • Longs are tagged by a capital L: 123L
    • Hexadecimals: 0x0F
    • Binaries: 0b00001011
    • Doubles by default: 123.5, 123.5e10
    • Floats are tagged by f or F: 123.5f
  • For readability: val oneMillion = 1_000_000
  • Memory optimization: -128~127 Integer에 적용 *==로 비교하게 되면 동등성 검사를 하므로 언제나 true임. ===로 주소를 비교했을 때 주소가 각각 같고 다르다는 것이 포인트
  • val a: Int = 100 val boxedA: Int? = a val anotherBoxedA: Int? = a val b: Int = 10000 val boxedB: Int? = b val anotherBoxedB: Int? = b println(boxedA === anotherBoxedA) // true println(boxedB === anotherBoxedB) // false
  • val l = 1L + 3 // Long + Int => Long
  • Div결과는 모두 true
  • val x = 5 / 2 println(x == 2) val x = 5 / 2f println(x == 2.5f)
  • NaN
  • double x = 0.0; double y = 0.0; double num = x/y; System.out.println(num); // NaN 출력 Double.isNaN(num);

Strings

val s = "abc"
println("$s.length is ${s.length}") // Prints "abc.length is 3"
  • 문자 ‘$’를 쓰기 위해
val price = """
${'$'}_9.99
"""

Arrays

class Array<T> private constructor() {
    val size: Int
    operator fun get(index: Int): T
    operator fun set(index: Int, value: T): Unit

    operator fun iterator(): Iterator<T>
    // ...
}

Primitive type arrays

  • Boxing overhead를 줄이기 위해
// Array of int of size 5 with values [0, 0, 0, 0, 0]
val arr = IntArray(5)

// Example of initializing the values in the array with a constant
// Array of int of size 5 with values [42, 42, 42, 42, 42]
val arr = IntArray(5) { 42 }

// Example of initializing the values in the array using a lambda
// Array of int of size 5 with values [0, 1, 2, 3, 4] (values initialized to their index value)
var arr = IntArray(5) { it * 1 }
  • IntArray vs int[]: Kotlin's IntArray provides additional functionality and is more concise and readable than Java's int[] syntax.

Type checks and casts

Smart casts

if (x is String) {
    print(x.length) // x is automatically cast to String
}

“Safe”(nullable) cast operator

val x: String = y as String

→ 변환이 안 되거나 y가 null이면 exception

val x: String? = y as String?

→ 변환이 안 될 경우 exception

val x: String? = y as? String

→ 사용 권장. 변환 실패 시 null 값을 가짐