본문으로 건너뛰기

타입 별칭

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

긴 제네릭 타입을 줄이는 데 유용합니다. 예를 들어 컬렉션 타입을 줄이는 것이 좋습니다.

typealias NodeSet = Set<Network.Node>

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

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

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

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

내부 및 중첩 클래스에 대한 새 이름을 가질 수 있습니다.

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으로 확장합니다. 따라서 일반 함수 타입이 필요한 경우 언제든지 해당 타입의 변수를 전달할 수 있으며 그 반대의 경우도 마찬가지입니다.

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]"
}