코틀린은 자바의 타입 시스템을 개선하여 Unit, Any, Nothing 이라는 세 가지 특별한 타입을 제공합니다.
이들은 함수의 반환, 타입 계층, 예외 처리를 명확하게 정의하는 데 중요한 역할을 합니다.
void와 유사).void는 키워드지만, Unit은 실제 타입이며 단 하나의 인스턴스만 존재.Unit은 타입이므로 제네릭 인자로 사용할 수 있음.fun exampleFunction(): Unit {
println("This function returns Unit.")
}
// 반환 타입 생략 시 자동으로 Unit 추론
fun exampleFunction2() {
println("This function also returns Unit.")
}
Object와 유사).Any는 null 불가. null 허용 시 Any? 사용해야 함.//any 메소드(함수)
fun printAny(value: Any) {
println("받은 값: $value")
println("값의 타입: ${value::class.simpleName}")
}
fun main() {
printAny("안녕하세요!") // String
printAny(12345) // Int
printAny(true) // Boolean
}
fail() 같이 반드시 예외를 던지는 함수.?: (엘비스 연산자)와 함께 null 처리.fun fail(message: String): Nothing {
throw IllegalArgumentException(message)
}
fun main() {
val name: String? = "코틀린"
val safeName = name ?: fail("이름이 없습니다!") // "코틀린" 할당
val anotherName: String? = null
val anotherSafeName = anotherName ?: fail("이름이 없습니다!")
println("이 코드는 실행되지 않습니다.") // 도달 불가
}
Void(자바): null만 가질 수 있는 참조 타입.Unit(코틀린): 단일 인스턴스를 가지며 실제 객체.Nothing?은 null만 허용하는 타입. 일반적으로 잘 쓰이지 않지만, API 설계에서 의미를 명확히 할 때 활용 가능.Nothing ← (모든 하위 타입의 시작점, 값 없음)
↑
String, Int, Boolean ... ← 일반 타입들
↑
Any ← 최상위 부모
↑
Unit ← 반환값 없음(특수 케이스)
이 다이어그램은 Kotlin 타입 계층 구조를 보여줍니다:
AnyString, Int, Boolean 등 모든 구체 타입이 Any를 상속Unit 역시 Any의 하위 타입Nothing은 모든 타입의 하위 타입(즉, "값이 존재하지 않음")