본문 바로가기

언어/Kotlin

[ 코틀린 / Kotlin ] if문과 When문은 각각 어떤 경우에 더 맞을까?

반응형

 

 

Kotlin에서 if 문과 when 문은 조건에 따라 코드를 실행하기 위한 두 가지 주요 방법입니다. 두 문 모두 특정 조건에 따라 프로그램의 흐름을 제어하지만, 사용 상황과 조건에 따라 어느 문을 사용할지 결정하는 몇 가지 기준이 있습니다. 아래에서 if 문과 when 문을 사용하는 조건과 각각의 사용 사례에 대해 자세히 설명하겠습니다.

if 문 사용 조건

if 문은 단순한 조건 검사와 특정 조건이 참인지를 확인할 때 가장 많이 사용됩니다. 주로 하나 또는 두 개의 조건을 평가하는 경우에 적합합니다.

사용 조건:

  1. 단순 조건:
    • 한두 개의 조건을 평가하고, 참 또는 거짓에 따라 코드 블록을 실행할 때 적합합니다.
val age = 18
if (age >= 18) {
    println("You are an adult.")
} else {
    println("You are a minor.")
}
  1. 연속된 조건 평가:
    • 여러 조건을 순차적으로 평가하고, 첫 번째로 참인 조건의 블록을 실행할 때 사용합니다.
val temperature = 30
if (temperature > 30) {
    println("It's hot.")
} else if (temperature < 10) {
    println("It's cold.")
} else {
    println("It's moderate.")
}
  1. 표현식으로 사용:
    • 조건 평가의 결과를 변수에 할당하고 싶을 때 사용합니다. if 문을 표현식으로 사용하면 더 간결한 코드 작성을 도와줍니다.
val a = 5
val b = 10
val max = if (a > b) a else b
println("The maximum value is $max")  // 출력: The maximum value is 10

사용 예제:

fun main() {
    val number = 7

    // 단순한 조건 검사
    if (number % 2 == 0) {
        println("$number is even")
    } else {
        println("$number is odd")
    }

    // 연속된 조건 평가
    val grade = 85
    val letterGrade = if (grade >= 90) {
        "A"
    } else if (grade >= 80) {
        "B"
    } else if (grade >= 70) {
        "C"
    } else if (grade >= 60) {
        "D"
    } else {
        "F"
    }
    println("Your grade is $letterGrade")  // 출력: Your grade is B
}

when 문 사용 조건

when 문은 여러 개의 조건을 검사하고, 그 중 하나가 참일 때 특정 블록을 실행하는 데 적합합니다. when 문은 다양한 상황에서 여러 조건을 간단하게 처리할 수 있는 강력한 도구입니다.

사용 조건:

  1. 여러 조건 처리:
    • 하나의 변수를 여러 값과 비교할 때 적합합니다. switch 문과 비슷한 용도로 사용됩니다.
val dayOfWeek = 3
val dayName = when (dayOfWeek) {
    1 -> "Sunday"
    2 -> "Monday"
    3 -> "Tuesday"
    4 -> "Wednesday"
    5 -> "Thursday"
    6 -> "Friday"
    7 -> "Saturday"
    else -> "Invalid day"
}
println("Day of the week: $dayName")  // 출력: Day of the week: Tuesday
  1. 복잡한 조건 표현:
    • 특정 값에 대한 비교 외에도, 범위, 타입 검사, 복잡한 논리 표현식 등을 처리할 때 적합합니다.
val score = 85
val grade = when {
    score >= 90 -> "A"
    score >= 80 -> "B"
    score >= 70 -> "C"
    score >= 60 -> "D"
    else -> "F"
}
println("Grade: $grade")  // 출력: Grade: B
  1. 표현식으로 사용:
    • 여러 조건 중 하나가 참일 때 값을 반환하여 변수에 할당하고 싶을 때 사용합니다.
val number = 10
val parity = when {
    number % 2 == 0 -> "even"
    else -> "odd"
}
println("The number is $parity")  // 출력: The number is even
  1. 타입 검사와 스마트 캐스팅:
    • 변수가 특정 타입인지 검사하고, 그 타입에 대해 적절한 처리를 할 때 사용합니다.
fun describe(obj: Any): String =
    when (obj) {
        is Int -> "An integer"
        is String -> "A string of length ${obj.length}"
        is Boolean -> "A boolean value"
        else -> "Unknown type"
    }

println(describe(42))  // 출력: An integer
println(describe("Kotlin"))  // 출력: A string of length 6
println(describe(true))  // 출력: A boolean value

사용 예제:

fun main() {
    val animal = "dog"

    // 여러 조건 처리
    val sound = when (animal) {
        "dog" -> "bark"
        "cat" -> "meow"
        "cow" -> "moo"
        else -> "unknown sound"
    }
    println("A $animal makes $sound sound")  // 출력: A dog makes bark sound

    // 복잡한 조건 표현
    val number = 10
    val description = when {
        number % 2 == 0 && number > 0 -> "positive even"
        number % 2 == 0 && number < 0 -> "negative even"
        number % 2 != 0 && number > 0 -> "positive odd"
        number % 2 != 0 && number < 0 -> "negative odd"
        else -> "zero"
    }
    println("The number is $description")  // 출력: The number is positive even
}

요약

  • if: 단순한 조건을 검사하거나 연속된 조건을 평가할 때 적합합니다. 조건 평가 결과를 변수에 할당하는 표현식으로 사용할 수 있습니다.
  • when: 여러 조건을 간단하게 처리하거나, 특정 값에 대한 비교 외에도 복잡한 조건 표현, 타입 검사, 논리적 비교 등을 할 때 유용합니다. switch 문과 비슷한 용도로 사용되지만 더 유연하고 강력한 기능을 제공합니다.

따라서, 간단한 조건을 처리할 때는 if 문을 사용하고, 다양한 경우를 처리하거나 보다 복잡한 조건을 평가해야 할 때는 when 문을 사용하는 것이 좋습니다.

반응형