Kotlin은 val
과 var
을 사용해 변수를 선언
val
을 사용해 선언된 변수에 값 재할당 불가var
사용val one = 1 // Int
val oneLong = 1L // Long
val pi = 3.15 // Double
// val one: Double = 1 // Error: type mismatch
val oneDouble = 1.0 // Double
val i = 10
val l: Long = i.toLong()
toShort()
, toInt()
, toFloat()
등을 사용한다.앞선 포스트에서 언급했듯이, Kotlin은 타입을 명시하지 않아도 알아서 추론해준다.
val t: Any = 10
println((t is Int)) // true
Any는 모든 자료형 클래스의 최상단에 위치해 코틀린의 모든 클래스는 Any라는 슈퍼 클래스를 가진다.
이로인해 Any를 사용한 자료형은 묵시적 변환에 의해 어떤 자료형으로든 변경될 수 있다.
// 기본적인 is 사용
조건문 (인스턴스 is 클래스타입){}
is
, !is
if (obj is String) {
print(obj.length)
}
if (obj !is String) { // same as !(obj is String)
print("Not a String")
} else {
print(obj.length)
}
is
fun demo(x: Any) {
if (x is String) {
print(x.length) // x is automatically cast to String
}
}
x가 Any 타입이였더라도 if절에 들어가면 is로 인해 스마트캐스팅 된다.
as
는 조건문 아니라 전체적인 코드에서 is
처럼 스마크캐스팅을 할 수 있다.인스턴스 = super 클래스로 만든 인스턴스 as 다운 캐스팅할 sub 클래스 타입