안드로이드 개발자 노트
[이펙티브 코틀린] Item13. Unit?을 리턴하지 말라 본문
반응형
코틀린에서는 void 대신, Unit 과 Nothing 이라는 타입을 제공해줍니다.
Unit 은 함수가 끝났으나, 의미있는 반환값이 없는 경우 사용합니다.
fun report() {
// 아무것도 반환하지 않으면 return Unit 이 반환된다.
}
fun main(){
val result = report()
println(result) // Kotlin.Unit
}
Nothing 은 함수가 끝이 나지 않는 경우 사용합니다.
예를 들면 throw Exception, while (true) { yield ... } 등이 있습니다.
Nothing?은 모든 Nullable 타입을 상속받아서 사용합니다.
타입추론 과정에서 생긴 컴파일 오류를 명시적으로 만들어 줄 수 있습니다.
var user = if ( isPass() ) 42 else fail("Not Ready")
// 이 때 fail에서 예외를 던진다면, var user는 Nothing? 타입으로 타입추론된다.
// Error: Type mismatch: inferred type is "User" but "Nothing?" was expected
Unit? 타입은 Boolean 타입과 서로 바꿔서 사용할 수 있습니다.
Boolean이 true 또는 false를 갖는 것 처럼, Unit?은 Unit 또는 null이라는 값을 가질 수 있기 때문입니다.
// Boolean 을 이용하는 경우
fun isCorrectKey(key: String): Boolean = ...
if (isCorrectKey(key)) return
// Unit? 을 이용하는 경우
fun verifyKey(key: String): Unit? = ...
verifyKey(key) ?: return
Unit?으로 Boolean을 표현하는 것은 오해의 소지가 있으며, 예측하기 어려운 오류를 만들 수 있습니다.
기본적으로 Unit?을 리턴하거나, 이를 기반으로 연산하지 않는 것이 좋습니다.
반응형
'Kotlin > 이펙티브 코틀린' 카테고리의 다른 글
[이펙티브 코틀린] Item14. 변수 타입이 명확하지 않은 경우 확실하게 지정하라 (0) | 2023.10.01 |
---|---|
[이펙티브 코틀린] Item12. 연산자 오버로드를 할 때는 의미에 맞게 사용하라 (0) | 2023.09.24 |
[이펙티브 코틀린] item11. 가독성을 목표로 설계하라 (0) | 2023.09.24 |