Unit, Nothing
03 Mar 2018Unit
반환값이 없는 함수를 나타내기 위해 사용한다.
즉 return 키워드를 사용하지 않으면 그 함수의 반환 타입은 Unit으로 간주된다.
다른 언어의 void와 다른점은?
다른 언어의 void는 반환타입이 없으므로 생략한다라는 뜻이다.
그럼 왜 코틀린은 Unit타입을 만들었나?
제네릭 함수에서는 반드시 반환 타입을 나타내야 한다.
void의 경우 제네릭을 처리하기 어렵다.
void를 사용하는 언어의 경우 제네릭 함수를 구현할 마땅한 방법이 없다.
Nothing
Unit처럼 반환값이 없는 함수를 나타낸다.
Unit과 다른점은 Nothing타입은 함수의 실행이 끝나더라도 호출 코드로 제어가 복귀되지 않는다.
그럼 Nothing 타입의 용도는?
의도적으로 예외를 발생시킬 때 사용할 수 있다.
Nothing 타입의 예
코틀린 표준 라이브러리에 있는 TODO 함수
public inline fun TODO(): Nothing = throw NotImplememtedError()
TODO 사용 예시
fun shouldReturnAString(): String {
TODO("문자열을 반환하는 코드를 여기에 구현해야 함")
}
shouldReturnAString함수의 반환 타입은 String이다. 이 함수는 어떤 것도 반환하지 않으므로 컴파일러가 에러로 처리해야 하지만 그렇지 않다. shouldReturnAString함수를 호출하면 TODO가 실행되고 TODO는 Nothing타입이기 때문에 shouldReturnAString함수로 제어가 복귀되지 않는다. 따라서 컴파일러는 이 코드를 에러로 처리하지 않는다.