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

2023. 10. 1. 12:49·Kotlin/이펙티브 코틀린
반응형

코틀린에서는 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
'Kotlin/이펙티브 코틀린' 카테고리의 다른 글
  • [이펙티브 코틀린] Item15. 리시버를 명시적으로 참조하라
  • [이펙티브 코틀린] Item14. 변수 타입이 명확하지 않은 경우 확실하게 지정하라
  • [이펙티브 코틀린] Item12. 연산자 오버로드를 할 때는 의미에 맞게 사용하라
  • [이펙티브 코틀린] item11. 가독성을 목표로 설계하라
어리둥절범고래
어리둥절범고래
    반응형
  • 어리둥절범고래
    안드로이드 개발자 노트
    어리둥절범고래
  • 전체
    오늘
    어제
    • 분류 전체보기 (111)
      • Android (14)
      • Kotlin (94)
        • 이펙티브 코틀린 (52)
        • 코틀린 완벽 가이드 (14)
        • 코틀린 코루틴 (17)
        • 코루틴의 정석 (11)
      • Conference (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
어리둥절범고래
[이펙티브 코틀린] Item13. Unit?을 리턴하지 말라
상단으로

티스토리툴바