코틀린의 Control Flow에는 조건문반복문으로 나누어 진다.

*조건문에는 if와 when이 존재한다. 이 중에서 코틀린은 when을 사용하는 것을 추천한다.

 

if

다른 언어들과 동일한 사용 방식.

val d: Int
val check = true

if (check) {
    d = 1
} else {
    d = 2
}

println(d)
// 1

* (check) 안에 들어갈 조건문의 결과가 항상 또는 거짓 이여야 함.

 

코틀린은 다른 언어와 다르게 삼항연산자가 없다

대신 

val a = 1
val b = 2

println(if (a > b) a else b) // Returns a value: 2

이런 식으로 표현이 가능하다.

 

When

- if와 달리 조건문에 식이 아닌 조건을 검사할 값이 들어간다.

- 여러 개의 분기 조건문을 지원(switch case문과 비슷)한다.

val obj = "Hello"

when (obj) {
    // Checks whether obj equals to "1"
    "1" -> println("One")
    // Checks whether obj equals to "Hello"
    "Hello" -> println("Greeting")
    // Default statement
    else -> println("Unknown")     
}
// Greeting

 

When을 추천하는 이유

  • 가독성이 좋다.
  • 여러 가지 분기 처리를 통해 명확한 표현이 가능하다.
  • 표현식으로 사용이 가능하다.
val result = when (value) {
    1 -> "One"
    2 -> "Two"
    else -> "Other"
}
  • 다양한 조건 처리가 가능하다.(값의 범위, 타입 검사 등)
val result = when {
    value in 1..10 -> "Between 1 and 10"
    value is String -> "It's a String"
    else -> "Other"
}
  • 타입 검사와 스마트 캐스팅 -> 안전성과 간결성을 높임
fun describe(obj: Any): String =
    when (obj) {
        is Int -> "An integer: $obj"
        is String -> "A string of length ${obj.length}"
        is List<*> -> "A list of length ${obj.size}"
        else -> "Unknown"
    }
  • 기본값 설정이 가능하다.(switch case의 default 처럼)