Shunz Android Dev Note
코틀린 or infix 함수와 short circuiting 본문
코틀린에서 boolean 연산을 수행하는 두 가지 방법은 연산자인 && 와 || 또는 infix 함수를 사용하는 것입니다. 이들은 대부분 동일하지만 한 가지 중요한 차이점이 있습니다. 연산자들은 short circuiting을 수행하지만 infix 함수는 그렇지 않습니다.
short circuiting란?
결과가 왼쪽 피연산자로부터 이미 결정된 경우 (예: 왼쪽 피연산자가 || 에 대하여 true이고 &&에 대하여 false) 오른쪽 boolean 피연산자가 수행되지 않는 최적화입니다. 다음 예를 참조하시면 좀 더 이해가 쉬울 것입니다.
fun isTrue(): Boolean {
println("이 함수는 true")
return true
}
fun isFalse(): Boolean {
println("이 함수는 false")
return false
}
fun main() {
val result1 = isTrue() || isFalse()
println("결과1 : $result1")
val result2 = isTrue() or isFalse()
println("결과2 : $result2")
}
결과
----------------------------
이 함수는 true
결과1 : true
이 함수는 true
이 함수는 false
결과2 : true
이 두 가지 접근법은 모두 옳고 그름이 없지만, 차이점을 아는 것이 중요합니다. 연산자와 infix 함수가 기능적으로는 같은 역할을 합니다.
결론
or infix 함수가 왜 short circuiting을 지원하지 않는지는 아직 찾지 못했습니다. 성능상 지원하는것이 좋을것 같은데 다른 이유가 있는지 아시는분이 계시다면 코멘트 남겨주세요.
참고 자료
'Kotlin' 카테고리의 다른 글
코틀린 - 인라인 함수(inline function)의 모든것 (inline, noinline, crossinline, reified types) (3) | 2023.12.17 |
---|---|
코틀린 코루틴에서의 취소 및 예외 처리 #3 - Exception Handling (0) | 2023.12.08 |
코틀린 코루틴에서의 취소 및 예외 처리 #2 - 취소 (1) | 2023.12.04 |
코틀린 코루틴에서의 취소 및 예외 처리 #1 - CoroutineScope, Job, CoroutineContext (0) | 2023.12.02 |
코틀린 코루틴의 비동기 프로그래밍 - async, await, awaitAll (0) | 2023.11.30 |