더북(TheBook)

대상이 있는 형태에서는 한 가지 안에 여러 조건을 콤마로 분리해 쓸 수 있다(위 예제의 1, 2, 3 -> "small" 절이 이런 경우다). 조건을 평가하는 과정에서 이런 조건은 각각의 조건을 논리 OR(||)한 것처럼 취급한다.

대상이 있는 형태의 가지의 식이 꼭 Boolean일 필요는 없다. 각 식은 적절한 연산(in 또는 !in이나 ==)을 적용할 수 있는 한 어떤 타입이라도 좋다.

자바 vs. 코틀린 자바 12부터는 코틀린의 대상이 있는 when과 아주 비슷한 switch 식이 등장했다. 하지만 자바 switch 식에는 몇 가지 제약이 있는데, 특히 범위 검사(코틀린의 in/!in)를 지원하지 않고 오직 정수, 이넘, 문자열 같은 몇 가지 타입에 대해서만 사용할 수 있다. 그리고 when 가지에서는 상수가 아닌 임의의 식을 사용해도 된다는 점에 유의하라.

코틀린 1.3부터는 다음과 같이 식의 대상을 변수에 연결(binding)할 수 있다.

fun readHexDigit() = when(val n = readLine()!!.toInt()) { // n을 정의
  in 0..9 -> '0' + n
  in 10..15 -> 'A' + n – 10
  else -> '?'
}

이때 정의한 변수는 when 블록 내부에서만 사용할 수 있고 var로 선언할 수는 없다.

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