1. typealias
- 변수들에 대한 새로운 별명을 지어주고, 짧게 사용 가능
- typealias를 클래스 혹은 함수 내에서 정의하는 것은 불가능하다
- typealias는 누구나 접근할 수 있는 Top Level 변수이다
- 동일한 type을 여러 개의 이름*으로 사용할 수 있다.
ex1-1. typealias NodeSet = Set<Network.Node>
ex1-2. typealias FileTable = MutableMap<K, MutableList>
ex2-1. typealias MyHandler = (Int, String, Any) > Uit
ex2-3. typealias Predicate = (T) -> Boolean
- PermissionDialog 클래스를 PermissionDialogCallback으로 정의
- (PermissionDialog) -> Unit :: (인자타임) -> 반환타입
2. Inline Class
- init block 적용 불가
- 추가적인 변수 선언 불가
inline class를 사용하기 위해선 gralde에 아래와 같은 소스코드 추가 필요
compileKotlin {
kotlinOptions {
freeCompilerArgs = ["-Xinline-classes"]
}
}
inline class 정의
inline class Name(val value: String)
val name = Name("Name") // 어떠한 값이든 들어올 수 있었던 String 대신, Name으로 명확화
name.value // inline class에서 값을 불러오는 방법
- typealias처럼 Top Level로 정의해야 함
3. typealias -> inline class
- data class는 inline을 허용치 않음
- inline class 정의 시, primitive만 허용 가능 (제네릭이나 Map 형태 불가)
(1) typealias 사용
typealias Hour = Int
typealias Minute = Int
typealias Seconds = Int
data class TimeData(
val hour: Hour,
val minute: Minute,
val seconds: Seconds
)
fun test(){
val hour = 3
val minute = 35
val seconds = 55
TimeData(minute, seconds, hour)
}
- typealias는 별칭만 달아줄 뿐, 값에 대한 보증 X
- hour, minute, seconds 모두 int이므로 혼동해서 사용해도 소스 상에서는 문제되지 않음
// 변수를 지정해주는 형태로 사용하여 실수를 줄일 것
TimeData(minute = minute, seconds = seconds, hour = hour)
data class TimeData(
val hour: Hour,
val minute: Minute,
val seconds: Seconds
)
inline class Hour(val value: Int)
inline class Minute(val value: Int)
inline class Seconds(val value: Int)
fun test(){
val hour = 3 // Hour(3)
val minute = 35
val seconds = 55
TimeData(hour, minute, seconds) // type 오류 발생
TimeData(Hour(hour), Minute(minute), Seconds(seconds))
}
- typealias보다 명확하게 값을 사용할 수 있음
'프로그래밍 언어 > Kotlin 기초' 카테고리의 다른 글
[프로그래머스/Kotlin]Level3 - 양과 늑대 (0) | 2023.06.25 |
---|---|
[Kotlin]Deligation (0) | 2023.02.24 |
[Kotlin]tailrec(꼬리재귀) (0) | 2023.02.24 |
[Kotlin공부]코틀린문법정리 : 07 설계도구 (0) | 2021.03.04 |
[Kotlin공부]코틀린문법정리 : 06 클래스 (0) | 2021.03.03 |