Kotlin 프리미티브
- Kotlin에서는 모든 것이 객체입니다. (널링 가능)
- 멤버 함수나 모든 속성을 호출할 수 있다는 장점이 있습니다.
숫자
- 거의 Java처럼 취급합니다.
- Kotlin에서 Number는 클래스입니다. Java는 기본 유형에 직접 액세스할 수 없습니다.
- Java의 숫자 유형인 char는 Kotlin의 숫자 유형이 아니라 문자 유형입니다.
묘사
- Java 플랫폼을 사용할 때 숫자 유형은 기본 JVM 유형으로 저장됩니다.
- Nullable 또는 Generic의 경우 boxing되어 객체로 사용됩니다.
- 정체성은 복싱에서 보존되지 않습니다.
- ‘===’는 같음과 같은 의미를 가집니다.
fun 숫자형() {
// JVM Primitive
var a: Int = 100
print(a === a) // Prints True
// Boxed
var boxedA: Int? = a
var anotherBoxedA: Int? = a
println("==: ${boxedA == anotherBoxedA}") // Prints True
println("===: ${boxedA === anotherBoxedA}") // Prints True
}
문자 그대로
- 10진수: 123(Int, Short)
- 긴: 123L
- 복식: 123.5, 123.5e10
- 수영 선수: 123.5f
- 바이너리: 0b00001011
- 8진수: 지원되지 않음( Java : int l = 017; )
- 16진수: 0X0F
선
- 문자열은 String 클래스로 표현됩니다.
- 문자열은 문자로 구성됩니다.
- 따라서 s(i)와 같은 방식으로 접근할 수 있다. (불변이므로 변경할 수 없음)
fun 문자열() {
var x: String = "Kotlin"
println(x.get(0))
println(x(0))
println(x.length)
for (c in x) {
println(c)
}
}
문자
- Char는 숫자로 취급되지 않습니다.
- if 조건문에서 ‘1’을 숫자 1로 바꾸면 컴파일 자체가 되지 않습니다.
fun 문자(c: Char): Any {
return if (c is Char) {
c
} else {
print("숫자가 아닙니다")
}
}
숫자 리터럴의 밑줄(1.1부터)
fun Literal_언더스코어() {
val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010
}
명시적 변환
- 더 작은 유형은 더 큰 유형의 하위 유형이 아닙니다.
- 작은 유형에서 큰 유형으로의 매핑은 불가능하며 명시적 변환이 필요합니다.
- + ( Byte | Short | Int | Long | Float | Double | Char )로 명시적으로 캐스트를 만들어 봅시다.
fun Explicit_Conversions() {
val a: Int = 1 // A boxed Int
// val b: Long = a // 오류
val b: Long = a.toLong()
// println(a == b) // 오류
val i: Int = b.toInt() // OK, 명시적 형변환을 해주어야 함
}
정렬
- 어레이 팩토리 기능을 사용하여 어레이를 생성할 수 있습니다.
- arrayOf()와 같은 라이브러리 함수를 사용하여 생성됩니다.
fun 배열() {
// 팩토리 함수 사용하여 배열 생성
var array1 = Array(5, { i -> i.toString()})
for (output in array1) {
print(output)
}
// Of 라이브러리 함수 사용하여 배열 생성
val array2 : Array<Int> = arrayOf(1,2,3,4,5)
for (output in array2) {
print(output)
}
val list : List<Int> = listOf(1,2,3,4,5)
val arrayList : ArrayList<Int> = arrayListOf<Int>()
array2(0) = 3
list(1)
arrayList.add(20)
}
특수 배열 클래스
- 프리미티브 타격의 복싱 노력을 제거하기 위한 배치
- IntArray, ShortArray, IntArray
- Array를 확장하지 않지만 Array와 동일한 메서드 및 속성을 갖는 클래스입니다.
- 크기와 같은 유용한 멤버 함수를 포함합니다.
fun 특별한배열() {
val x: IntArray = intArrayOf(1,2,3)
x(0) = 7
println(x.get(0))
println(x(0))
println(x.size)
}