Skip to content

타입 별칭

타입 별칭은 기존 타입에 대한 대체 이름을 제공합니다. 타입 이름이 너무 길다면, 더 짧은 다른 이름을 도입하여 그 새로운 이름을 대신 사용할 수 있습니다.

긴 제네릭 타입을 줄이는 데 유용합니다. 예를 들어, 컬렉션 타입을 줄이고 싶은 경우가 많습니다.

kotlin
typealias NodeSet = Set<Network.Node>

typealias FileTable<K> = MutableMap<K, MutableList<File>>

함수 타입에 대해 다른 별칭을 제공할 수 있습니다.

kotlin
typealias MyHandler = (Int, String, Any) -> Unit

typealias Predicate<T> = (T) -> Boolean

내부 클래스(inner class)와 중첩 클래스(nested class)에 대해 새로운 이름을 가질 수 있습니다.

kotlin
class A {
    inner class Inner
}
class B {
    inner class Inner
}

typealias AInner = A.Inner
typealias BInner = B.Inner

타입 별칭은 새로운 타입을 도입하지 않습니다. 이는 해당하는 기반 타입과 동일합니다. typealias Predicate<T>를 추가하고 코드에서 Predicate<Int>를 사용할 때, Kotlin 컴파일러는 항상 이를 (Int) -> Boolean으로 확장합니다. 따라서 일반 함수 타입이 필요할 때마다 해당 타입의 변수를 전달할 수 있으며, 그 반대의 경우도 마찬가지입니다.

kotlin
typealias Predicate<T> = (T) -> Boolean

fun foo(p: Predicate<Int>) = p(42)

fun main() {
    val f: (Int) -> Boolean = { it > 0 }
    println(foo(f)) // prints "true"

    val p: Predicate<Int> = { it > 0 }
    println(listOf(1, -2).filter(p)) // prints "[1]"
}