Boolean 이 true
, false
값을 갖는 거처럼 Unit도 Unit
또는 null
값을 가질 수 있다.
간혼 Boolean 대신 Unit?
을 사용하기도 한다.
fun keyIsCorrect(key: String): Boolean {
//...
}
fun main() {
if (!keyIsCorrect(key = "key")) return
}
이 코드를 다음처럼 사용할 수 있다
fun verifyKey(key: String): Unit? {
// ...
}
fun main() {
verifyKey(key = "key") ?: return
}
쓸 때는 멋있을 수도 있어도 읽을 때는 혼란을 야기한다.
Unit?으로 뭘 표현하는 건지 오해의 소지가 있기 때문이다.
만약 이 코드가 긴 코드에 포함된다고 생각해보자. 개발자들에게 장해물을 안겨주는 것일 수도 있다.
이전에 아래와 같은 코드가 어렵다고 했다
getData()?.let { view.showData(it) } ?: view.showError()
getData()
가 null이 아니라 let 안에 함수를 타는데, 이 때 showData
가 null을 반환하면 view.showError()
타서 두 개의 함수가 호출된다.
이런 거보단 if/else
문으로 푸는게 좋다.
if (!keyIsCorrect(key)) return
verifyKey("key") ?: return
둘 중 어느 코드가 더 읽기 쉬운가?
Unit?
을 쉽게 읽을 수 있는 경우는 별로 보지 못했다. 이를 리턴하거나 연산하지 않는게 좋다.
웬만하면 Boolean으로 사용하는 형태가 좋다.