•
타입 별칭은 기존 타입에 대한 대체 이름을 제공한다.
•
타입 이름이 너무 길면 더 짧은 이름을 만들어서 새로운 이름을 대신 사용할 수 있다.
•
이 기능은 특히 제네릭 타입이 길어질 때 유용하다.
typealias NodeSet = Set<Network.Node>
typealias FileTable<K> = MutableMap<K, MutableList<File>>
Kotlin
복사
함수 타입을 위한 타입 별칭
•
타입 별칭은 함수 타입에도 사용할 수 있다.
typealias MyHandler = (Int, String, Any) -> Unit
typealias Predicate<T> = (T) -> Boolean
Kotlin
복사
내부 클래스에 대한 타입 별칭
•
내부 클래스와 중첩 클래스에도 새로운 이름을 제공할 수 있다.
class A {
inner class Inner
}
class B {
inner class Inner
}
typealias AInner = A.Inner
typealias BInner = B.Inner
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]"
}
Kotlin
복사
•
Predicate<Int>는 실제로 (Int) → Boolean 타입으로 확장되므로 동일하게 동작한다.
•
fun foo(p: Predicate<Int>) 는 Predicate<Int> 나 (Int) → Boolean 타입을 모두 받을 수 있다.