1. 💡 Kotlin Basic Types
- 코틀린에서 모든것은 객체이다. (Nullable을 위함)
- 모든것의 멤버 함수나 프로퍼티를 호출 가능하다는 장점이 있다.
1.1. 숫자형
- Java와 거의 비슷하게 처리한다.
- Kotlin에서 Number는 클래스이다. Java는 Primitive Type에 직접 접근이 불가능하다.
- Java에서 숫자형이던 char는 Kotlin에서 숫자형이 아닌 문자형이다.
Representation
- 자바 플랫폼을 사용할 경우 숫자형은 JVM Primitive Type으로 저장된다.
- Nullable이나 Generic의 경우에는 Boxing 되어 Object로 사용된다.
- Boxing된 경우, Identity를 유지하지 않는다.
- '==='는 equals와 같은 의미이다
<kotlin />
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
}
1.2. Literal
- 10진수 : 123 (Int, Short)
- Long : 123L
- Double : 123.5, 123.5e10
- Float : 123.5f
- 2진수 : 0b00001011
- 8진수 : 미지원 ( Java : int l = 017; )
- 16진수 : 0X0F
String
- 문자열은 String 클래스로 표현
- String은 Character로 구성된다.
- 그러므로 s[i]와 같은 방식으로 접근이 가능하다. (Immutable 이므로 변경 불가)
<kotlin />
fun 문자열() {
var x: String = "Kotlin"
println(x.get(0))
println(x[0])
println(x.length)
for (c in x) {
println(c)
}
}
Characters
- Char는 숫자로 취급되지 않음
- if 조건문 안의 '1'을 숫자 1로 바꾸면 컴파일 자체가 안된다.
<kotlin />
fun 문자(c: Char): Any {
return if (c is Char) {
c
} else {
print("숫자가 아닙니다")
}
}
Underscores in numeric literals (since 1.1)
<kotlin />
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
}
1.3. Explicit Conversions
- 작은 타입은 큰 타입의 하위 타입이 아니다.
- 작은 타입에서 큰 타입으로의 대입이 안되고 명시적으로 변환을 해주어야 한다.
- to + [ Byte | Short | Int | Long | Float | Double | Char ]로 명시적 형변환을 하자.
<kotlin />
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, 명시적 형변환을 해주어야 함
}
1.4. Array
- Array의 팩토리 함수를 사용해서 배열을 생성하거나
- arrayOf() 등의 라이브러리 함수를 사용해 생성한다.
<kotlin />
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)
}
특별한 Array 클래스
- Primitive 타읍의 박싱 오버헤드를 없애기 위한 배열
- IntArray, ShortArray, IntArray
- Array를 상속한 클래스들은 아니지만, Array와 같은 메서드와 프로퍼티를 가짐
- size 등 유용한 멤버 함수를 포함한다
<kotlin />
fun 특별한배열() {
val x: IntArray = intArrayOf(1,2,3)
x[0] = 7
println(x.get(0))
println(x[0])
println(x.size)
}
'Languages > Kotlin' 카테고리의 다른 글
Kotlin Controll Flow (0) | 2023.03.29 |
---|---|
[Operator Overloading] 이항 & 단항 산술 연산자 오버로딩 (0) | 2023.03.29 |
[Operator Overloading] 복합 대입 & 비교 연산자 오버로딩 (0) | 2023.03.29 |
Kotlin Basic Syntax (0) | 2023.03.26 |
Java와 Kotlin의 차이 (0) | 2023.03.24 |