자바가 사용되고 있는 모든 용도에 적합하면서도 간결하고, 생산적이며 안전한 대체 언어를 제공
장점
간결하고 실용적
자바 코드와의 상호운용
대부분의 자바 프로젝트에서 코틀린 사용 가능(안드로이드, 서버 개발)
자바와 비슷한 성능
안전성(null체크, 타입 검사와 캐스트)
1.즉시 대입(타입 선언)
val a:Int = 1
2.즉시 대입(타입 체크)
val a = 1
val a:Int
a = 1
선언 후 나중에 초기화해야 할 때에는 타입을 static하게 정해놓고 사용해야 한다.
fun sum1(a : Int, b: Int) : Int// 리턴 타입 {
return a+b //리턴 값
}
fun sum2(a : Int, b: Int) = a+b
fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
}
fun printSumNoUnit(a: Int, b: Int) {
println("sum of $a and $b is ${a + b}")
}
fun string_template() {
var a = 1
val s1 = "a is $a"
println(s1) //a is 1
a = 2
val s2 = "${s1.replace("is", "was")}, but now is $a"
println(s2) //a was 1, but now is 2
}
변수 a는 문자열안에서 $기호를 붙여 값을 대입하여 사용할 수 있다. 또한 ${} 안에서 문자열 s1는 자신의 인스턴스 메소드를 사용할 수 있다.
fun maxOf(a: Int, b: Int): Int {
if (a > b) {
return a
} else {
return b
}
}
fun maxf2(a: Int, b: Int) = if(a>b) a else b
if(a>b) return a
else return b
엘비스 연산자 ?:
class Elvis{
var na : String? = null
fun elvis(){
var name1 : String = na ?: "NA"
//na는 현재 null 이기 때문에 name1에는 NA가 들어간다.
var name2 : String = na ?: return
//na는 현재 null 이기 때문에 함수 자체를 return 시킨다.
var name3 : String = na ?: throw NullPointerException()
//na는 현재 null 이기 때문에 NullPointerException 예외가 발생한다.
var 변수 이름 : 변수 타입 = true ?: false
${str?.length ?: -1}
str이 null이라면 -1 반환 아니라면 length 반환
if(str != null) str.length else -1
와 똑같은 문장이다