본문 바로가기
Kotlin

[깡샘의 코틀린 프로그래밍] 정리 5 - Unit과 Nothing

by 들풀민들레 2018. 3. 2.

 

본 글은 [깡샘의 코틀린 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.

좀더 자세한 내용은 책을 통해 확인해 주세요.

 

 

 

 

5장. 데이터 타입

 

5.1.6. Unit과 Nothing

타입은 대부분 데이터와 관련 있습니다. String 타입은 문자열 데이터를 표현하기 위한 목적이며 Int 타입은 정수를 표현하기 위한 목적입니다. 그런데 코틀린에서 제공하는 타입 중 데이터와 관계 없이 특수 상황을 표현하기 위한 Unit과 Nothing 타입이 있습니다. 사실 Unit과 Nothing을 제대로 이해하려면 이후에 살펴보는 제네릭을 이해해야 합니다. 그러므로 여기서는 간단하게 소개만 하고 제네릭 부분에서 다시 다루겠습니다.

 

Unit은 흔히 함수의 반환 구문이 없다는 것을 표현하기 위해 사용됩니다. 흔히 자바의 void에 해당한다고 보면 됩니다. (정확히 이야기하면 자바의 void와는 차이가 있지만 여기서는 이 정도로 이해하면 됩니다.)

 

01 fun myFun1() { }

02 fun myFun2(): Unit { }

 

위 코드에서 myFun1( ) 함수를 선언했습니다. 이 함수에는 return 구문이 없습니다. 딱히 반환할 데이터가 없다는 것입니다. 함수는 함수 선언 부분에 콜론(:)으로 구분해서 함수의 반환 타입을 명시해야 하는데 선언하지 않았습니다. 그러면 기본으로 Unit으로 선언한 것과 같습니다. 그러므로 01번 줄의 함수 선언은 02번 줄의 Unit으로 반환 타입을 명시한 선언과 같습니다. 이처럼 Unit을 반환 타입으로 사용하는 함수는 함수에서 의미 있는 반환값이 없다는 의미이므로 자바의 void와 비슷하다고 이야기할 수 있습니다.

 

Nothing은 의미 있는 데이터가 없다는 것을 명시적으로 선언하기 위해 사용하는 타입니다

 

01 fun myFun(arg: Nothing?): Nothing {

02     throw Exception()

03 }

 

위의 소스를 보면 함수를 Nothing 타입으로 선언했습니다. 이 함수는 항상 예외(Exception)를 발생시킵니다. 이 함수에서 함수를 호출한 곳에 의미 있는 데이터를 반환하지 못합니다. Nothing 타입은 이처럼 의미 있는 데이터가 없다는 것을 명시적으로 표현하고자 사용합니다.

 

여기까지 설명하면 Unit과 Nothing의 차이가 명확하게 구분되지 않을 수도 있습니다. 또한, Unit은 알겠는데, Nothing을 왜 써야 하는지 이해가 부족하지 않을까 싶습니다. 하지만 앞서 말했듯이 여기서는 이 정도로만 정리하고 넘어갑시다. Unit과 Nothing의 차이를 명확하게 구분하고 왜 필요한지 이해하려면 제네릭을 이해해야 합니다.