JVM(Java Virtual Machine)에 기반을 둔 언어로 젯브레인스에서 오픈소스 그룹을 만들어 개발한 프로그래밍 언어이다.
JVM이란 자바 가상 머신으로 Java 프로그램 실행환경을 만들어주는 소프트웨어이다. 즉, 컴파일을 하면 kotiln이 java 클래스파일로 바뀌고 자바 가상 머신을 거쳐 OS에 특화된 코드로 변환되는 것이다.
변수의 자료형은 할당된 값을 통해 추론된다.
val data1 = 10 //10을 통해 type 추론
var data2 = 10
fun main() {
data1 = 20 //data1은 val로 선언되었기 때문에 오류
data2 = 30 //data2는 var로 선언되어 값을 바꿀 수 있음
}
변수의 type을 지정하고 싶을 때는 변수명 뒤에 :을 추가해 명시해준다.
val data3: Int = 10
##최상위
val data1: Int = 10
val data2: Int //error
## 함수 내부
fun testFun() {
val data3: Int
}
##클래스 멤버 변수
class User {
val data4: Int //error
val data5: Int = 40
}
lateinit val data1: Int // 오류
lateinit var data2: String
단, Int, Long, Short, Double, Float, Boolean, Byte 처럼 코틀린에서 기본으로 제공하는 primitive type에는 적용할 수 없다.
val data: Int by lazy {
10 // 이 값이 data에 할당
}
fun main() {
println(data+10) // 10 + 10 -> 20 출력
println(data+20) // 10 + 20 -> 30 출력
}
변수에 타입을 지정해 줄때 Int처럼 첫글자에 대문자를 쓴 이유를 생각해 보았는가?
코틀린의 모든 변수는 객체라는 것을 생각하면 이해하기 수월해진다.
Int, Short, Long, Double, Float, Byte, Boolean : 기초 타입 객체
Char, String : 문자와 문자열
String 타입의 데이터는 "" or """로 감싸서 표현한다.
val d0: Any = 모든 타입 // 최상위 데이터 타입
val d1: Byte = 0b00001011
val d2: Int = 10
val d3: Short = 20
val d4: Long = 30L
val d5: Double = 10.0
val d6: Float = 20.0f
val d7: Boolean = true
val d8: Char = 'a'
val d9: String = """Hello"""
println("name : $name, sum : $sum, result : ${10+sum}")
fun some(): Unit {
print("Hello")
}
# null 반환
val data: Int? = null
fun some1(): Nothing? {
return null
}
#예외 반환
fun some2(): Nothing {
throw Exception()
}
함수 선언의 기본 구조
fun 함수명(매개변수명:타입): 반환타입{
}
fun some(data: Int) (Unit생략){
data = 30 // data는 함수의 매개변수로 val이기 때문에 값을 변경할 수 없음. error
}
fun main() {
fun some(data1: Int, data2: Int = 10) Int{ //10이 기본값
return data1 + data2
}
println(some(10)) // 10(data1에 전달) + 10(기본값) -> 20 출력
println(some(10, 20)) // 10 + 20 -> 30 출력
}