Kotlin: Unit과 Nothing

LUNA Y0UNG
4 min readApr 21, 2020

Unit

‘return Unit’ 혹은 ‘return’이라고 써도 되고 안 써도 된다.

반환 값이 필요없을 때, 함수의 반환 타입으로 Unit을 사용한다. 반환 타입이 Unit이면 함수 끝에 return을 쓰지 않아도 된다. 물론 굳이 return을 쓰고 싶다면 써도 된다. 단, 이때는 return 뒤에 표현식을 적지 말고 return만 단독으로 사용해야 한다.

코틀린의 Unit 타입은 자바의 void에 대응되는 개념이다. 하지만 이 둘이 완전히 같은 것은 아니다. void는 반환 값이 없음을 의미하는 특수 타입이지만, Unit은 class 키워드로 정의된 일반 타입이기 때문이다. 자바의 Void 클래스와 비슷한 개념으로 보면 된다.

Unit 타입을 반환하는 함수는, return을 생략한다고 해도 암묵적으로 Unit 타입의 객체를 return하도록 되어 있다. 단, 그 Unit 객체는 싱글톤 인스턴스이기 때문에 매번 객체를 생성하지는 않는다.

-Kotlin 200제 (엄민석, 정보문화사)

Nothing

코틀린에서 throw 는 표현식이기 때문에, 다음과 같이 Elvis 표현식의 일부로 사용할 수 있다.

특수타입 Nothing 타입은 실행 흐름이 도달할 수 없는 구역을 나타내기 위한 특수 타입이며throw 표현식은 Nothing 타입을 갖는다. 이 타입은 어떠한 값도 갖고 있지 않으며 어떠한 타입과도 호환된다. 이 타입은 앞서 말한 대로 도달이 불가능한 코드의 위치를 표시하기 위해 쓰인다(used to mark code locations that can never be reached).

위 함수를 호출하면, 컴파일러는 해당 함수를 넘어선 부분은 실행되지 않는다는 것을 알게 된다(the compiler will know that the execution doesn’t continue beyond the call).

원래 ‘s’는 prinlt(s) 지점에서 초기화되도록 되어있다.

Nothing 타입은 타입을 추론할 때도 쓰인다. Nothing?은 null값을 지정할 수 있는 nullable한 Nothing이며, 오직 null값만 가질 수 있다(has exactly one possible value, which is null). 만약 변수가 null값으로 초기화되고 해당 값의 타입을 추론하기 위한 다른 정보가 없을 경우 컴파일러는 해당 변수의 타입을 Nothing? 타입으로 추론한다.

x는 Nothing? 타입이고, l은 List<Nothing?> 타입이다.

출처 및 참조

  • Kotlin 200제 (엄민석, 정보문화사)
  • Kotlin docs

-https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/#unit

-https://kotlinlang.org/docs/reference/functions.html#unit-returning-functions

-https://kotlinlang.org/docs/reference/exceptions.html#the-nothing-type

--

--