더북(TheBook)

when 문도 if처럼 식으로 쓸 수 있다. 이때 모든 가능한 경우에 대한 값을 만들어내기 위해 else 가지를 꼭 포함시켜야 한다.

fun hexDigit(n: Int) = when {
  n in 0..9 -> '0' + n
  n in 10..15 -> 'A' + n – 10
  else -> '?'
}

자바 vs. 코틀린 코틀린 when은 여러 대안 중 하나를 선택한다는 점에서 자바 switch 문과 비슷하다. 하지만 가장 중요한 차이는 when에서는 임의의 조건을 검사할 수 있지만 switch에서는 주어진 식의 여러 가지 값 중 하나만 선택할 수 있다는 점이다. 추가로 자바의 switch 문은 폴스루(fall-through)라는 의미를 제공한다. 어떤 조건을 만족할 때 프로그램이 해당 조건에 대응하는 문을 실행하고 명시적으로 break를 만날 때까지 그 이후의 모든 가지를 실행하는데, 이를 폴스루라고 한다. 코틀린 when은 조건을 만족하는 가지만 실행하고 절대 폴스루를 하지 않는다.

조건이 어떤 값에 대한 동등성이나 in 연산만 수행하는 경우에는 더 적합한 다른 형태의 when 문이 있다. 다음 함수를 보자.

fun numberDescription(n: Int): String = when {
  n == 0 -> "Zero"
  n == 1 || n == 2 || n == 3 -> "Small"
  n in 4..9 -> "Medium"
  n in 10..100 -> "Large"
  n !in Int.MIN_VALUE until 0 -> "Negative"
  else -> "Huge"
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.