일반적으로 범위는 동적으로 할당되는 객체이기 때문에 비교 대신 범위를 사용하면 약간의 부가 비용이 든다. 하지만 컴파일러는 꼭 필요할 때만 실제 객체를 만들어내기 위해 노력한다. 예를 들어 다음 프로그램을 실행하면 런타임에 IntRange 인스턴스를 생성하지 않고, 5를 입력한 값과 비교한다.
fun main() { val a = readLine()!!.toInt() val b = readLine()!!.toInt() println(5 in a..b) }
따라서 성능 측면에서 볼 때 이 코드는 a <= 5 && 5 <= b라는 조건식과 같다. 범위나 진행을 주로 사용하는 다른 경우로는 for 루프를 들 수 있다.
IDE 팁 ≡
인텔리J 플러그인에는 코틀린 코드의 저수준 의미를 알아보고 싶을 때 도움이 되는 JVM 바이트코드 뷰어가 들어있다. 이 뷰어를 열려면 IDE 메뉴에서 Tools > Kotlin > Show Kotlin Bytecode를 선택하라. 뷰어는 에디터에 있는 현재 파일의 바이트코드를 반영해 갱신되며, 현재 소스코드에서 캐럿의 위치에 대응되는 바이트코드 부분을 자동으로 미리 선택해준다.
JVM 바이트코드에 익숙하지 않은 독자라면 Decompile 버튼을 클릭해서 바이트코드를 자바 코드로 변환할 수 있다. 코틀린 컴파일러가 생성한 바이트코드의 몇몇 세부 사항에 따라서는 디컴파일된 자바 코드가 이상해 보일 수도 있다. 하지만 그런 자바 코드라도 여전히 원래 코틀린 코드가 내부적으로 어떻게 동작하는지 이해하기에는 충분하다.