Language/kotlin

조건문 다루기

kimjingyu 2023. 5. 17. 23:34
728x90

if문

  • 자바와 코틀린은 똑같이 생김
  • 차이점
    • 자바에서 if-else는 Statement
    • 코틀린에서는 Expression

Expression과 Statement

  • Statement: 프로그램의 문장. 하나의 값으로 도출되지 않는다.
    • 자바에서는 if문을 하나의 값으로 취급하지 않는다. ( Statement )
  • Expression: 하나의 값으로 도출되는 문장.
    • 자바에서 3항 연산자는 하나의 값으로 취급된다. ( Expression 이면서 Statement )
  • 코틀린에서는 if-else를 expression으로 사용할 수 있기때문에 3항 연산자가 없다.
// Expression & Statement - if / else
fun getPassOrFail(score: Int): String {
    return if (score >= 50) {
        "Pass"
    } else {
        "Fail"
    }
}
// Expression & Statement - if / else if / else
fun getGrade(score: Int): String {
    return if (score >= 90) {
        "A"
    } else if (score >= 80) {
        "B"
    } else if (score >= 70) {
        "C"
    } else {
        "D"
    }
}
  • 어떤 값이 특정 범위에 포함되어 있는지, 포함되어 있지 않은지
    • if (score in 0..100)

switch와 when

when (값) {
	조건부 -> 어떤 구문
    조건부 -> 어떤 구문
    else -> 어떤 구문
}
// Switch -> When
fun getGradeWithSwitch1(score: Int): String {
    return when (score / 10) {
        9 -> "A"
        8 -> "B"
        7 -> "C"
        else -> "D"
    }
}

fun getGradeWithSwitch2(score: Int): String {
    return when (score) {
        in 90..99 -> "A"
        in 80..89 -> "B"
        in 70..79 -> "C"
        else -> "D"
    }
}
  • 조건부에는 어떠한 expression이라도 들어갈 수 있다. 
    • Ex) is Type
fun startsWithA(obj: Any): Boolean {
    return when (obj) {
        is String -> obj.startsWith("A")    // smart casting
        else -> false
    }
}
  • 조건부에서는 여러개의 조건을 동시에 검사할 수 있다. ( , 로 구분한다. )
// 조건부에서는 여러개의 조건을 동시에 검사할 수 있다. ( , 로 구분한다. )
fun judgeNumber(number: Int) {
    return when (number) {
        1, 0, -1 -> println("어디서 많은 본 숫자")
        else -> println("듣도보도 못한 숫자")
    }
}
  • 값이 없을수도 있다. -> early return 처럼 동작
// 값이 없을수도 있다. -> early return 처럼 동작
fun judgeNumber2(number: Int) {
    when {
        number == 0 -> println("주어진 숫자는 0입니다.")
        number % 2 == 0 -> println("주어진 숫자는 짝수입니다.")
        else -> println("주어진 숫자는 홀수입니다.")
    }
}
  • when은 Enum class 혹은 Sealed class 와 함께 사용할 경우에 더욱 진가를 발휘한다.
728x90