회사에서 업무할 때 다루는 코틀린을 좀 더 잘 써보기 위해 배우던 도중 or infix function의 존재를 알게 되었습니다. 그런데 이걸 실제로 사용하는 케이스를 회사 코드 내에서 찾아보지 못해서 왜 안 쓰는지 궁금해서 좀 더 자세히 살펴봤습니다.
코틀린을 or 라는 이름의 infix 함수를 제공하고 있습니다. || 연산자와 동일하게 A 조건식과 B 조건식 중 하나의 결과값이라도 참이라면 참을 반환해줍니다.
infix 함수이기 때문에 A or B
와 같은 형태로 코드를 작성할 수 있습니다. 개인적으로 코드의 가독성이 좋아진다고 생각했습니다.
다만, or infix 함수의 특성 상 || 연산자에 비해 실행 속도가 느려질 수 있는 문제가 존재합니다.
fun main() {
val elapsed = measureTimeMillis {
val alwaysTrue = true
if (alwaysTrue or getFalseAfter5Sec()) {
println("Test result is true")
} else {
println("Test result is false")
}
}
println(elapsed)
}
fun getFalseAfter5Sec(): Boolean {
// NOTE: 5초간 sleep
runBlocking {
launch {
delay(5000L)
}
}
return false
}
위 코드를 실행해보면 실제로 5초 이후에 "Test result is true" 라는 문자열이 콘솔에 출력됩니다. 왜나하면 or infix 함수의 경우 두 조건식을 모두 평가하기 때문입니다.
만약 || 연산자였다면 short-circuit 평가로 인해 거의 즉시 "Test result is true"라는 문자열이 콘솔에 출력되었을 것입니다.