Hanbit the Developer
Kotlin Documentation | Types 본문
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 값을 가짐
'Kotlin' 카테고리의 다른 글
Kotlin Documentation | Asynchronous programming techniques (0) | 2023.05.22 |
---|---|
Kotlin Documentation | Equality (0) | 2023.05.22 |
Kotlin Documentation | Null safety (0) | 2023.05.22 |
Kotlin Documentation | Control flow (0) | 2023.05.22 |
Kotlin Documentation 시리즈에 대해 (0) | 2023.05.22 |