Kotlin - Unit, Nothing, Any

권태용·2020년 9월 25일
0

Kotlin

목록 보기
5/6

Q1. Unit, Nothing, Any 타입에 대한 설명
Q2. Nothing, Any, Object의 관계는?

Kotlin에 대해 기본적 문법을 찾아보기에 급급해서 정작 타입에 대한 관계를 공부하지 못 했다.
Kotlin에 있는 Unit, Nothing, Any 타입들을 살펴보고 Java에서의 Object 클래스와 차이점?을 살펴보았다.

Unit, Nothing, Any란 어떤 클래스인가?

Kotlin에 정의된 각 클래스들의 주석을 살펴보고 코드를 통해 확인해보자

Unit

오로지 하나의 값을 가지는 오브젝트 Unit, 이 타입은 Java에 void와 상응한다. 로 해석했다.
좀 더 찾아보니 코틀린은 void '리턴값이 없는' 상태를 Unit이라는 싱글톤 클래스로 정의한다.

각기 Unit(void)를 리턴하는 함수를 만들고 리턴결과의 hashCode()를 출력해보니 같은 객체(싱글톤)임을 확인했다.

하지만 왜 Kotlin에서 void를 객체타입으로 정의했는지에 대한 의문은 풀리지 않았다. 어떤 장점이 있어서 새로 만든게 아닌가 싶은데 Unit의 활용법에 대해 좀 더 공부가 필요하다.(생각엔 void개념을 파라미터에도 사용할 수 있다는 장점이 있을것 같은데 예시가 없으니 확신이 안생긴다.)

Nothing

'Nothing 은 인스턴스가 없다. Nothing이 의미하는것은 값이 존재하지 않는다는 것이다. 만약 function의 리턴 타입이 Nothing이라면 그것은 절대 return 하지 않는다는 것을 의미한다.'

위 의미를 들었을때는 이해가 간다. Nothing을 리턴 타입으로 한다면 절대 리턴을 하지 않겠구나 하지만 그게 Unit이랑 별개로 두어서 생기는 이점은 뭘까?에 대해선 설명이 부족했다.

이를 이해하기 위해선 'Nothing은 모든클래스의 하위 클래스이다' 개념이 필요하다. 때문에 어떤 타입에 변수에도 캐스팅 될 수 있다.

위 코드에서 fail()함수는 Nothing을 리턴하고 main()함수에서 str 이라는 변수의 someValue를 할당할때 그 값이 널값인지를 체크하고 null이라면 에러를 발생시킨다.

Any

'코틀린 클래스 계층구조에 최상단. 모든 코틀린 클래스는 Any를 최상위 클래스로 가지고 있다.'

Any는 Java에 Object와 같다. Any에 정의된 함수는 equals, hashCode, toString으로 기능적 측면에서도 완벽히 같지는 않지만 유사하다 볼 수 있다.

Nothing, Any, Object의 관계는?

위 3개의 관계를 Kotlin과 Java로 분리해서 보면 아래와 같은 클래스 계층 구조를 나타내는 것이라고 생각 된다. Java와 Kotlin의 다른 점은 수많은 관점이 있겠지만 그중 하나로 Nothing에서 발견 할 수 있을 것 같다.

profile
개발일기장

0개의 댓글