Kotlin 복습(2)-캐스팅,$,람다,확장함수

지슈·2023년 7월 9일
0

Kotlin 복습

목록 보기
2/4

타입체크와 캐스팅

타입체크

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 값을 다르게 하여 반환하도록 한다.



string template

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")

$표시만 하면 번거로운 작업 없이도 변수 그대로 출력할 수 있다.



람다

코틀린은 객체지향형이면서 함수형이다.
람다는 함수형 프로그래밍언어의 특성이 나타나는 것이다.

개념

  1. 익명함수 - 함수의 이름이 없다는 뜻
  2. 변수처럼 사용돼서 매개변수가 함수자체가 될 수 있고, 리턴 값이 함수가 될 수 있다.
  3. 한 번 사용되고, 재사용되지 않는다.

사용법

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("하이")

이렇게 추가하기만 하면 된다.

profile
😎인공지능&⛓️블체

0개의 댓글