기본 데이터 타입
숫자 타입
char타입을 숫자로 인식하지 않음- 모든 숫자 타입 클래스는
Number타입의 서브클래스이다 - 자동 형변형을 지원하지 않음
- 숫자 타입 데이터의 가독성을 위해서 underscore(
_) 사용 가능.
val positive: Int = 1_000_000
문자열
- 스트링 템플릿 리터럴 지원
val name = "John" val greeting = "hello ${name}" - raw string 지원
val greeting = """hello world"""
Any 타입
코틀린의 최상위 클래스(Java Object 보다 상위 클래스)
// Type check
fun getLength(obj: Any): Int {
if(obj is String) {
return obj.length // `length`는 String의 property, `is` 타입체크가 true일 경우, String 타입으로 스마트 캐스팅
}
return 0
}
// switch 보다 기능이 많은 when
fun cases(obj: Any): String {
when(obj) {
1 -> return "One"
"Hello" -> return "Greeting"
is Long -> return "Long"
}
}
Null허용 타입val a: Int = null // error val b: Int? = null // OK fun parseInt(str: String): Int { return str.toIntOrNull() }Any?<-Anyis,asval myVal1: Any = 10 val myVal2: Any? = myVal1
Unit & Noting: 제네릭의 타입 명시를 위해서
- Unit: 명시적인 리턴이 없다.
- Nothing: 의미있는 리턴이 아니다, 코틀린의 최하위 클래스
- Unit은 타입 클래스
// OK fun myFun(): Unit { return Unit() } - Nothing: 함수의 리턴타입?
// OK fun myFun(): Nothing { throw Exception() }
타입 확인과 캐스팅
- 타입 체크를 위해
is예약어 이용 - 타입 체크결과가
true이면 스마트 캐스팅
var a1: Int = 10
var a2: Double = a1 // !error
var a3: Double = a1.toDouble() // OK
배열: 배열도 클래스(Array)이다.
fun main(args: Array<String>) {
var array = arrayOf(1, "Shawn", true) // Array<Any>
array[0] = 10
array[2] = "hello"
println("size: ${array.size}.. ${array[0]}, ${array.get(1)}, ${array.get(3)})
}
컬렉션
- mutable 클래스와 immutable 클래스로 구분