본문 바로가기
프로그래밍/Kotlin

Kotlin 배우기 (3)

by 채연2 2024. 2. 13.

Contents

     

     

    조건식

     

    If 표현식

    java와 달리 Kotlin에서는 변수에 값을 할당할 때 if-else if-else 표현식으로도 저장이 가능하므로 삼항연산자를 사용할 필요가 없다.

    max = if (a > b) a else b
    
    val maxLimit = 1
    val maxOrLimit = if (maxLimit > a) maxLimit else if (a > b) a else b

     

     

    if 표현식의 분기는 블록 처리할 수도 있다. 또, 값을 반환하거나 변수에 값을 할당하는 경우에 if 표현식을 사용할 경우 else 분기는 필수로 사용되어야 한다.

    val max = if (a > b) {
        print("Choose a")
        a
    } else {
        print("Choose b")
        b
    }

     

     

    when 표현식

    when 표현식은 일부 분기 조건을 만족할 때까지 모든 분기에 대한 argument를 순차적으로 매칭시킨다.

    when은 표현식이나 명령문으로 사용될 수 있다. 표현식으로 사용되는 경우 첫 번째 일치하는 분기의 값이 전체 표현식의 값이 되고, 명령문으로 사용되는 경우 개별 분기의 값은 무시된다. if 와 마찬가지로 각 분기는 블록이 될 수 있으며 해당 값은 블록의 마지막 표현식 값이다.

    when (x) {
        1 -> print("x == 1")
        2 -> print("x == 2")
        else -> {
            print("x is neither 1 nor 2")
        }
    }

     

     

    when 표현식은 컴파일러가 가능한 모든 경우가 분기 조건으로 처리된다는 것을 증명할 수 없는 한 else 분기는 필수이다.

    enum class Color {
        RED, GREEN, BLUE
    }
    
    when (getColor()) {
        Color.RED -> println("red")
        Color.GREEN -> println("green")
        Color.BLUE -> println("blue")
    }
    
    when (getColor()) {
        Color.RED -> println("red")
        else -> println("not red")
    }

     

     

    여러 경우에 대한 공통 동작을 수행하고 싶다면 ,(쉼표)를 사용하여 한줄로 정의하면 된다.

    when (x) {
        0, 1 -> print("x == 0 or x == 1")
        else -> print("otherwise")
    }

     

     

    상수 뿐만 아니라 임의의 표현식도 사용할 수 있다.

    when (x) {
        s.toInt() -> print("s encodes x")
        else -> print("s does not encode x")
    }

     

     

    범위 연산자 in을 사용하여 범위 값이나 컬렉션을 확인할 수 있다.

    when (x) {
        in 1..10 -> print("x is in the range")
        in validNumbers -> print("x is valid")
        !in 10..20 -> print("x is outside the range")
        else -> print("none of the above")
    }

     

     

    is 연산자를 사용하여 특정 유형의 값을 확인할 수 있다. 또, 스마트한 캐스팅으로 추가 확인 없이 해당 유형의 메서드 및 속성에 액세스 할 수 있다.

    fun hasPrefix(x: Any) = when(x) {
        is String -> x.startsWith("prefix")
        else -> false
    }

     

     

    when은 if-else if 구문을 대체하여 사용할 수 있다.

    when {
        x.isOdd() -> print("x is odd")
        y.isEven() -> print("y is even")
        else -> print("x+y is odd")
    }

     

     

    when은 아래 코드처럼 함수의 본문이 될 수 있다. when에서 선언된 변수의 범위는 when 본문 안에서만 제한된다.

    fun Request.getBody() =
        when (val response = executeRequest()) {
            is Success -> response.body
            is HttpError -> throw HttpException(response.status)
        }

     

     

     

    320x100

    '프로그래밍 > Kotlin' 카테고리의 다른 글

    Kotlin 배우기 (2)  (1) 2024.02.01
    Kotlin 배우기 (1)  (0) 2024.02.01
    [Kotlin 기초 2] Objects (3)  (9) 2023.02.17
    [Kotlin 기초 2] Objects (2)  (6) 2023.02.09
    [Kotlin 기초 2] Objects (1)  (4) 2023.02.09

    댓글