스물아홉 번째, 타입 별칭입니다.
타입 별칭(type aliases)은 기존 타입에 대안이 되는 이름을 제공합니다. 타입 이름이 너무 긴 경우, 새롭게 짧은 이름을 추가하고 이를 대신 사용할 수 있습니다.
타입 별칭은 특히 긴 제네릭 타입을 줄일때 유용합니다. 예를 들어, 때때로 컬렉션 타입을 줄이고 싶은 유혹이 들 때가 있습니다.
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>라고 추가하고 Prodicate<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]"
}
'Kotlin' 카테고리의 다른 글
공식 문서로 배우는 코틀린 - 31. Higher-order functions and lambdas (0) | 2024.03.13 |
---|---|
공식 문서로 배우는 코틀린 - 30. Functions (0) | 2024.03.13 |
공식 문서로 배우는 코틀린 - 28. Delegated properties (0) | 2024.03.12 |
공식 문서로 배우는 코틀린 - 27. Delegation (0) | 2024.03.12 |
공식 문서로 배우는 코틀린 - 26. Object expressions and declarations (0) | 2024.03.12 |