코틀린은 JVM위에서 동작한다. 자바는 class안에 main 메서드를 선언해야 한다. 하지만 코틀린은 class없이 main 메서드 생성, 실행이 가능하다. Android Studio에서 Tools > Kotlin > Show Kotlin ByteCode를 선택 Decomplie을 하면 코틀린 파일을 java class로 확인할 수 있다.
◼️자료형
코틀린 원시 타입 종류 정리
정수 타입: Byte, Short, Int, Long
부동 소수점 수 타입: Float, Double
문자 타입: Char
불리언 타입: Boolean
코틀린의 자료형은 모두 대문자로 시작한다.
코틀린의 모든 데이터는 reference data type으로 컴파일 후 내부적으로 primitive type으로 동작한다.
primitive type인 byte, short, int 등은 직접 사용하지 못한다.
◼️변수
val(value) : 불변형 (immutable)
var(variable) : 가변형 (mutable)
◼️자료형 변환
코틀린의 기본 자료형은 모두 객체이다.
자료형 변환 메소드를 사용해야 형변환이 가능하다.
val a:Byte = 5.toByte() //Byte
val b = 65.toChar() //Char
val c = 10.toShort() //Short
val d = 10 //Int
val e = 10L //Long
val f = 10.0f //Float
val g = 10.0 //Double
예시와 같이 코틀린은 변수 선언시 자료형을 별도로 선언하지 않아도 값을 보고 유추한다.
▪️ 자료형 변환 메서드 종류
◼️표현식에서 자료형의 자동 변환
val num = 1L + 3 // num은 Long타입
String의 경우 여러 줄을 사용하고자 한다면 다음과 같이 사용할 수 있다.
val str = """
코틀린 공부
파이팅!!
""".trimIndent()
◼️문자열 비교
자바와 달리 코틀린은 "==" 연산자로 문자열 비교가 가능하다.
◼️문자열에 변수 넣기
val num1 = 100
val str1 = "abc $num1" // abc 100
val str3 ="abc $num1.toString()" // abc 100.toString
val str4 ="abc ${num1.toString()}" // abc 100
◼️스마트 캐스트
구체적으로 명시되지 않은 자료형을 자동 변환 해준다. ( = 값에 따라 자료형을 결정 )
var cast:Number = 6.2 // cast 은 Double형으로 스마트캐스팅됨.
println("value : $cast , data type: ${cast.javaClass}")
cast = 12 //Integer 형으로 스마트캐스트
println("value : $cast , data type: ${cast.javaClass}")
cast = 12L //Long 형으로 스마트캐스트
println("value : $cast , data type: ${cast.javaClass}")
cast += 12.0f //Float형으로 스마트캐스트
println("value : $cast , data type: ${cast.javaClass}")
◼️is 키워드를 사용한 형 검사
val num = 256
if (num is Int) { // num이 Int형일 때
print(num)
} else if (num !is Int) { // num 이 Int형이 아닐 때, !(num is Int) 와 동일
print("Not a Int")
}
여기서 자바와 차이점이 있다. 자바는 instanceOf 메서드로 타입체크를 수행한 후 다시 타입에 맞게 casting을 해야 했다. 하지만 코틀린은 타입체크와 동시에 casting을 한 번에 수행한다.
val string = "타입캐스팅 후 자동으로 형 변환"
val temp:Any = string
if(temp is String){
println(temp) // 타입캐스팅 후 자동으로 형 변환
}