fun check(a: Any): String{
return when (a) {
is String -> {
"문자열"
}
is Int -> {
"숫자"
}
else -> {
"몰라요"
}
}
}
타입체크를 할 때 코틀린은 is
를 사용한다.
if문 대신 when
문을 사용하도록 권장한다.
val result = a as? String
코틀린은 as?
로 타입 캐스팅이 불가능한 예외 상황에 null을 반환하도록 한다.
val result = (a as? String) ?: "실패"
이를 변형해서 위처럼 사용할 수도 있다.
이 경우, null이 반환되는 상황에서 "실패"를 반환하도록 한다.
fun smartcast(a: Any): Int{
return if(a is String){
a.length
}else if(a is Int){
a.dec()
}else{
-1
}
}
코틀린의 특징 중 smart cast
는 타입마다 return 값을 다르게 하여 반환하도록 한다.
log 찍을 때 특히 유용한 방법이다.
자바의 경우에는 변수를 문자열화시켜서 출력하고 싶을 때 toString
을 사용했다.
val a = 10
val name = "안녕"
val isHigh = true
println(a.toString() +name+isHigh.toString())
근데 코틀린은 더 쉽다.
val a = 10
val name = "안녕"
val isHigh = true
println("$a ${name.length} $isHigh")
$
표시만 하면 번거로운 작업 없이도 변수 그대로 출력할 수 있다.
코틀린은 객체지향형이면서 함수형이다.
람다는 함수형 프로그래밍언어의 특성이 나타나는 것이다.
val a = fun(){
println("hello")
}
val c: Int = 10
val b :(Int) -> Int = {
it *10
}
println(b(10))
함수를 변수로 선언할 수 있다. ()
안에 인자타입, ->
뒤에 리턴타입이 들어감.{}
안에 함수의 구현부가 들어감.
매개변수가 한 개라면 구현부에 it
으로 변수를 가리킬 수 있다.
val d = {i : Int, j: Int -> i*j}
구현부 내에 인자타입과 리턴타입을 같이 쓸 수도 있다.
Extension Function.
기존에 정의되어 있던 클래스에 함수를 추가하는 기능
class Test(){
fun hello() = println("안녕")
fun bye() = println("잘가")
}
기존에 이런 클래스가 있다고 치자.
이 클래스의 함수를 불러올 때는 main
함수에서 불러온다.
Test().hello()
그런데 이 클래스의 새로운 함수를 추가하고 싶다면 그냥
fun Test.hi() = println("하이")
이렇게 추가하기만 하면 된다.