
코틀린 typealias는 긴 타입 이름에 짧고 의미 있는 별칭을 붙이는 문법입니다. 콜백 타입이나 복잡한 generic 타입을 읽기 쉽게 만들 때 특히 편합니다.
핵심은 typealias가 새 타입을 만드는 것이 아니라 기존 타입의 다른 이름을 만드는 것입니다. 이 글은 Kotlin 공식 type aliases 문서를 기준으로 좋은 사용 예와 조심할 지점을 정리합니다.

코틀린 typealias를 먼저 한 줄로 정리하면
typealias는 기존 타입에 다른 이름을 붙이는 문법입니다. 타입 이름이 너무 길거나 함수 타입이 읽기 어려울 때 의미 있는 이름으로 바꿔 호출부를 정리할 수 있습니다.
typealias UserId = String
typealias OnClick = (UserId) -> Unit
fun bindClick(listener: OnClick) {
listener("user-1")
}이 코드는 `UserId`라는 이름을 쓰지만, 컴파일러 관점에서 새 타입이 생긴 것은 아닙니다. 여전히 실제 타입은 `String`입니다.
긴 타입 이름을 줄일 때 유용하다
중첩된 generic 타입이나 콜백 타입은 그대로 쓰면 함수 시그니처가 길어집니다. typealias를 쓰면 관심 있는 의미가 앞으로 나옵니다.
typealias UserCache = MutableMap<String, List<User>>
typealias ResultHandler = (Result<User>) -> Unit새 타입을 만드는 것은 아니다
가장 중요한 주의점은 typealias가 타입 안정성을 추가하지 않는다는 점입니다. 별칭끼리 이름이 달라도 원래 타입이 같으면 서로 대입될 수 있습니다.
typealias UserId = String
typealias OrderId = String
fun findUser(id: UserId) {}
val orderId: OrderId = "order-1"
findUser(orderId) // 타입 관점에서는 String이라 통과도메인 개념을 컴파일러가 구분해 주길 원한다면 typealias만으로는 부족합니다. 이때는 value class 같은 다른 표현을 검토해야 합니다.
함수 타입 별칭은 읽기 좋아질 수 있다
콜백이나 이벤트 handler는 함수 타입이 길어지기 쉽습니다. typealias를 쓰면 함수의 모양보다 역할을 먼저 읽을 수 있습니다.
typealias Validator<T> = (T) -> Boolean
fun validateName(name: String, validator: Validator<String>): Boolean {
return validator(name)
}언제 쓰면 좋을까
- 긴 generic 타입을 여러 곳에서 반복할 때
- 함수 타입의 역할을 이름으로 설명하고 싶을 때
- 외부 라이브러리 타입을 프로젝트 문맥에 맞게 읽고 싶을 때
- 타입 구조보다 도메인 용어를 앞에 보여주고 싶을 때
언제 조심해야 할까
- 새 타입이 생긴다고 착각할 때
- UserId와 OrderId처럼 반드시 구분해야 하는 값을 같은 원시 타입 별칭으로만 둘 때
- 별칭이 너무 많아 실제 타입을 추적하기 어려워질 때
- 타입 이름을 줄였지만 오히려 의미가 모호해질 때
value class와 비교해서 보기
typealias는 이름만 바꿉니다. 반면 value class는 특정 값을 감싸는 별도 타입을 표현할 수 있어 도메인 구분에 더 강합니다.
@JvmInline
value class UserId(val value: String)
fun findUser(id: UserId) {}정리
코틀린 typealias는 긴 타입에 읽기 쉬운 이름을 붙이는 도구입니다. 하지만 새 타입을 만드는 문법은 아니므로, 타입 안정성을 높이고 싶은 문제에는 다른 모델링 방법까지 함께 봐야 합니다.
Kotlin 문법 흐름은 코틀린 확장 함수는 왜 편할까, 코틀린 when은 switch와 무엇이 다를까, 코틀린 sealed class와 enum 차이와 함께 보면 좋습니다. 외부 기준은 Kotlin Docs – Type aliases, Kotlin Docs – Functional types, Kotlin Docs – Inline value classes를 확인했습니다.