이펙티브 코틀린 Item 13: Unit?을 리턴하지 마라

woga·2023년 4월 23일
0

코틀린 공부

목록 보기
16/54
post-thumbnail

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으로 사용하는 형태가 좋다.

profile
와니와니와니와니 당근당근

0개의 댓글