[Kotlin] Any, Unit, Nothing 클래스
📚 Any, Unit, Nothing 클래스
📔 Any
📖 공통 메서드 작성
모든 클래스는 기본으로 최상위 클래스 Any 클래스를 자동으로 상속한다. 따라서 Any 클래스에 확장 함수를 지정하면 공통 메서드로 사용된다.
fun Any.dir(): Set<String> {
val a = this.javaClass.kotlin // 현재 객체의 클래스 저장
println(a.simpleName)
var ll = mutableListOf<String>()
for (i in a.members) { // 클래스의 멤버 순회
ll.add(i.name) // 이름을 리스트에 저장
}
return ll.toSet() // 오버로딩된 메서드 제거
}
println(Any().dir()) // Any 클래스 멤버만 출력
var count = 0
for (i in 'a'.dir()) { // 문자에 대한 멤버 출력
print(i + ", ")
count++
if (count % 5 == 0) println()
}
Any
[equals, hashCode, toString]
Char
compareTo, dec, describeConstable, equals, inc,
minus, plus, rangeTo, rangeUntil, toByte,
toChar, toDouble, toFloat, toInt, toLong,
toShort, toString, hashCode,
📖 Any 클래스의 메서드 오버라이딩 처리
import kotlin.reflect.full.isSubclassOf
class A {
override fun toString() = "재정의 : A()" // 상위 클래스 메서드 재정의
override fun hashCode(): Int {
println("### hashCode 재정의 ###")
return super.hashCode()
}
}
val a: Any = A() // 최상위 클래스 자료형에 객체 전달
println(a.toString()) // 재정의한 메서드 출력
println(a.hashCode())
println(a.equals(a)) // 두 객체 비교
println((A::class).isSubclassOf(Any::class)) // 슈퍼 클래스와 서브 클래스 관계 확인
println((A::class).supertypes) // 상속 표시를 하지 않아도 기본 최상위 클래스 상속
재정의 : A()
### hashCode 재정의 ###
357788434
true
true
[kotlin.Any]
📔 Unit
함수를 반환하는 과정에서 반환값이 존재하지 않을 경우, 보통 Unit을 반환 자료형으로 지정한다.
import kotlin.reflect.full.isSubclassOf
println((Unit::class).isSubclassOf(Any::class)) // 서브 클래스 여부 확인
println(Unit.dir()) // 공통 메서드 dir 실행
println((Unit::class).supertypes) // 상위 클래스 확인
fun func(a: Any): Unit {
println(a.toString() + " => " + a.javaClass.kotlin)
}
println("#### 각 자료형의 클래스 확인 ####")
func(100)
func(100L)
func(100.0)
func(100.0f)
func('c')
func(false)
func("문자열")
func(Exception("예외"))
true
Unit
[toString, equals, hashCode]
[kotlin.Any]
#### 각 자료형의 클래스 확인 ####
100 => class kotlin.Int
100 => class kotlin.Long
100.0 => class kotlin.Double
100.0 => class kotlin.Float
c => class kotlin.Char
false => class kotlin.Boolean
문자열 => class kotlin.String
java.lang.Exception: 예외 => class java.lang.Exception
📔 Nothing
Nothing 클래스는 함수를 반환할 때 아무것도 없다는 것을 표시하는 클래스이며, 보통 예외 등을 처리할 때 해당 클래스의 객체가 발생한 것으로 여긴다.
println((Nothing::class).isSubclassOf(Any::class)) // 상속 관계
println((Nothing::class).isSubclassOf(Int::class))
println((Nothing::class).supertypes) // 상위 클래스 확인
fun except(): Nothing { // 반환값이 없음
throw Exception(" 예외 ") // 예외 발생
}
try { // 예외 처리
except()
} catch (e: Exception) {
println(e.message)
}
true
false
[kotlin.Any]
예외