코틀린에서 조건문을 사용하는 방법에는 ifwhen 표현식이 있습니다. 이 두 가지를 적절히 활용하면 코드의 가독성과 효율성을 높일 수 있습니다. 이번 포스팅에서는 ifwhen 조건문을 사용하는 방법을 자세히 알아보겠습니다.

if 표현식

코틀린에서 if는 단순한 조건문이 아닌 표현식으로 사용되며, 직접 값을 반환할 수 있습니다.
이는 코틀린의 주요 특징 중 하나로, if 문을 값으로 사용할 수 있어 코드가 더 간결해집니다.

자바스크립트 코드:

let a = 10;
let result;

if (a > 5) {
    result = "a는 5보다 큽니다";
} else {
    result = "a는 5보다 작거나 같습니다";
}

console.log(result);

코틀린 코드:

val a = 10
val result = if (a > 5) {
    "a는 5보다 큽니다"
} else {
    "a는 5보다 작거나 같습니다"
}

println(result)

코틀린에서는 ifwhen문에서 중괄호를 사용하여 블록을 명확히 구분할 수 있습니다. 이 방법은 코드가 여러 줄일 때 유용합니다.
또한 코틀린에서는 블록이 한 줄로 작성될 경우 중괄호를 생략할 수 있습니다. 이를 통해 코드가 더 간결해질 수 있습니다.

중괄호 제거시:

val a = 10
val result = if (a > 5) "a는 5보다 큽니다" else "a는 5보다 작거나 같습니다"

println(result)

when 표현식

when문은 코틀린에서 조건문을 처리하는 강력한 방법입니다. 자바스크립트의 switch문과 유사하지만, 좀 더 유연하고 다양한 조건을 처리할 수 있습니다.

기본 사용법

val x = 2

val result = when (x) {
    1 -> {
        println("One")
        // 추가 코드
    }
    2 -> {
        println("Two")
        // 추가 코드
    }
    else -> {
        println("Unknown")
        // 추가 코드
    }
}

여러 값 처리

하나의 조건에서 여러 값을 동시에 처리할 수 있습니다.

val x = 2
val result = when (x) {
    1, 2, 3 -> "x는 1, 2 또는 3입니다"
    4 -> "x는 4입니다"
    else -> "x는 다른 값입니다"
}
println(result)

조건식 처리

when은 조건식을 포함할 수 있어 복잡한 로직을 간결하게 표현할 수 있습니다.

val x = 2
val result = when {
    x < 0 -> "x는 음수입니다"
    x == 0 -> "x는 0입니다"
    x > 0 -> {
        println("x는 양수입니다")
        "양수"
    }
    else -> "알 수 없는 값입니다"
}
println(result)

복잡한 조건 처리

val x = 5
val result = when {
    x % 2 == 0 && x > 0 -> "x는 양수의 짝수입니다"
    x % 2 != 0 && x > 0 -> "x는 양수의 홀수입니다"
    else -> "x는 음수이거나 0입니다"
}
println(result)

스마트 캐스트

스마트 캐스트(Smart Cast)는 Kotlin에서 타입 변환을 자동으로 처리해주는 기능입니다. when 표현식과 같은 조건문에서 변수를 검사한 후, 해당 변수의 타입이 자동으로 캐스트되는 것을 말합니다.

예를 들어, when을 사용할 때, 변수의 타입이 특정 조건을 만족하면 Kotlin이 자동으로 해당 타입으로 캐스트해줍니다. 이를 통해 명시적으로 캐스팅을 하지 않아도 됩니다.

fun handleInput(input: Any) {
    when (input) {
        is String -> println("문자열 길이: ${input.length}")
        is Int -> println("정수의 제곱: ${input * input}")
        else -> println("알 수 없는 타입")
    }
}

여기서 when 표현식에서 inputString일 때는 자동으로 String 타입으로 변환되어 length 속성에 접근할 수 있고, Int일 때는 Int 타입으로 변환되어 제곱을 계산할 수 있습니다.