반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

안드로이드 개발자 노트

[이펙티브 코틀린] Item13. Unit?을 리턴하지 말라 본문

Kotlin/이펙티브 코틀린

[이펙티브 코틀린] Item13. Unit?을 리턴하지 말라

어리둥절범고래 2023. 10. 1. 12:49
반응형

코틀린에서는 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?을 리턴하거나, 이를 기반으로 연산하지 않는 것이 좋습니다.

 

반응형