728x90
Unit
Java의 void와 동일하다.
함수가 유용한 것을 반환하지 않거나 리턴해줄 값이 아무것도 없으면 암시적으로 Unit을 반환한다고 말합니다.
그리고 이러한 기능은 부작용이 있는 작업을 수행할 수 있습니다. 무언가 기록/인쇄하거나 반환 값 없이 조작을 수행합니다.
fun printHelloUnit(name: String?): Unit {
if (name != null)
println("Hello $name")
else
println("Hi there!")
}
//The Unit return type declaration is also optional. The above code is equivalent to:
fun printHello(name: String?) {
if (name != null)
println("Hello $name")
else
println("Hi there!")
}
위의 예에서 반환 유형을 Unit으로 명시적으로 언급하면 컴파일러에서는 Unit 유형이 중복되므로 명시적 언급을 제거하도록 제안합니다.
Nothing
문자 그대로 아무 것도 생명으로의 복귀가 없으며 게임은 거기서 끝납니다.를 의미합니다.
즉, 함수가 여기서에서 반환되지 않고 예외가 발생하거나 무한 루프에 들어갈 것입니다.
또한 반환 유형이 Nothing인 함수를 호출한 후에 작성하는 모든 코드는 컴파일러에서 연결할 수 없는 것으로 표시됩니다.
결론
Unit
은 내가 돌아올 것이지만 당신이 관심을 가질만한 가치는 없습니다. 라고 말합니다.Nothing
은 나는 결코 돌아오지 않을 것입니다. 라고 말하는 것과 같습니다.
따라서 기능을 보다 명확하게 개별적으로 언급하는 데 도움이 됩니다.
class NothingClass {
fun returnName(isSuccess: Boolean): String? {
return if (isSuccess) {
println("Sara")
"Sara"
} else null
}
fun reportError(): Nothing {
println("no name found")
throw RuntimeException()
// var i = 1 // unreachable code
}
// here if you don't specify Nothing explicitly, it shows compile time error
fun iWillAlwaysThrowException() : Nothing = throwException("Unnecessary Exception")
}
fun main() {
val nothingClass = NothingClass()
val name: String = nothingClass.returnName(true) ?: nothingClass.reportError() // Compiles and the return type is String or Nothing
val noName: String = nothingClass.returnName(false) ?: nothingClass.reportException()
}
728x90
'Language.' 카테고리의 다른 글
Java의 예외 생성 비용, 비용 절감 방법 (0) | 2024.04.25 |
---|---|
Kotlin Delegation으로 클래스간 결합도 낮추기 (1) | 2023.10.01 |
자바의 네 가지 참조 유형(Strong, Weak, Soft, Phantom) (0) | 2023.08.23 |
자바 Cleaner, PhantomReference 클래스 (0) | 2023.07.27 |
[Kotlin] kapt란? (0) | 2023.04.16 |