더북(TheBook)

각 화살표(->)의 오른쪽에는 값 대신 여러 줄로 된 블록을 넣을 수도 있다. 그런 경우 반환되는 값은 블록의 맨 마지막 줄의 값이다. 각 경우의 맨 끝에 break를 넣을 필요가 없다. if ... else 식과 마찬가지로 블록 안에 효과를 넣지 말아야 한다.

여기서 코틀린은 빠진 경우가 있는(non-exhaustive) when을 허용하지 않는다는 점을 꼭 알아두라. 가능한 모든 경우를 처리해야 한다. 이넘을 사용할 경우 이넘에서 가능한 모든 값에 대해 각각의 경우를 나열할 수 있다. 나중에 새로운 값을 이넘에 추가하면서 when 식에 필요한 처리를 추가하지 않는다면 더 이상 코드가 컴파일되지 않는다. (모든 경우를 처리하는 가장 간단한 방법은 else를 지정하는 것이다.)

when을 다른 구문으로 사용할 수도 있다.

val country = ...

val capital = when {
    tired                  -> "Check for yourself"
    country == "Australia" -> "Canberra"
    country == "Bolivia"   -> "Sucre"
    country == "Brazil"    -> "Brasília"
    else                   -> "Unknown"
}

when의 조건이 어느 한 가지 인자에만 의존하지 않을 경우에 이런 식으로 when을 사용하면 유용하다. 이 예제에서 tired는 다른 곳에서 초기화된 불 값이다. tiredtrue면 그에 대응하는 화살표의 오른쪽에 있는 값이 반환된다. 각 조건은 나열된 순서대로 검사된다. 가장 먼저 참으로 평가되는 조건이 전제 when 식의 값을 결정한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.