val data1: Int = 10
val data2 = 20
var data3 = 30
val nullableData1: String? = null
var nullableData2: String? = null
- const
const val myConst: Int = 10
const var myConst2: Int = 10 // ← 에러
class MyClass{
const val myConst3 = 30 // ← 에러
}
fun some(){
const val myConst4 = 40 // ← 에러
}
- fun
fun sum(a: Int, b: Int): Int {
return a+b
}
fun sum(a: Int, b: Int): Unit{ // 반환값 없을 때 Unit 명시
//...
}
fun sum(a: Int, b: Int){ // Unit 생략가능
//...
}
fun some(a: Int, b: Int): Int = a+b
fun some(a: String){
println("some(a: String) call...")
}
fun some(a: Int){
println("some(a: Int) call...")
}
fun some(a: Int, b: String){
println("some(a: Int , b: String) call...")
}
- infix
다음의 경우만 사용 가능
∙ 클래스의 맴버 함수로 선언하거나 클래스의 확장(extension)함수일 때
∙ 매개변수가 하나인 함수일 때
// 함수 확장
infix fun Int.myFun(x: Int): Int{
return x*x
}
class FunClass{
infix fun infixFun(a: Int){
println("infixFun call...")
}
}
fun main(args: Array<String>){
val obj = FunClass()
obj.infixFun(10)
obj infixFun 10 // 중위표현식
println(10 myFun 10)
println(10.myFun(10))
}
🖥
infixFun call...
infixFun call...
100
100
- vararg
인수의 개수나 타입에 상관 없이 아무렇게나 지정해도 함수 호출
fun <T> varargsFun(a1: Int, vararg array: T){
for(a in array){
println(a)
}
}
fun main(args: Array<String>){
varargsFun(10, "hello", "world")
varargsFun(10, 20, false)
}
🖥
hello
world
20
false
- tailrec
// 재귀 함수
fun recPrint(no: Int = 1, count: Int = 1){
println("recPrint..")
return if(no == count) return else recPrint(no -1, count)
}
fun main(args: Array<String>){
recPrint(3)
}
// tailrec 재귀 함수
tailrec fun tailrecPrint(no: Int = 1, count: Int = 1){
println("tailrecPrint..")
return if(no==count) return else tailrecPrint(no -1, count)
}
fun main(args: Array<String>){
tailrecPrint(3)
}
🖥
recPrint..
recPrint..
recPrint..
tailrecPrint..
tailrecPrint..
tailrecPrint..
코틀린에는 static 예약어 자체가 없다.
[java]
public static final int CONST_VAL = 10;
[kotlin]
const cal CONST_VAL = 10
class Test{
final var myVal = 10
fun some(){
myVal = 30
}
}
-> 아무 문제 없이 잘 실행된다. 변경할 수 없는 변수 정의시 val 사용
-> 코틀린은 초깃값 없더라도 lateinit를 사용하여 나중에 명시적으로 초깃값을 대입하여 사용하거나, 물음표(?) 기호를 이용해 null 허용(nullable)으로 선언하여 null값으로 초기화하고 사용해야 한다.
-> 함수 내에 함수를 정의하거나 함수를 중위 표현식으로 이용하거나 기본 인수 등을 제공