이 포스트는 아래의 Android 공식 홈페이지에서 제공하는 Codelab을 기반으로 작성되었습니다.
https://developer.android.com/codelabs/basic-android-kotlin-compose-generics?hl=ko#0
Compose로 작업할 때 Double과 같은 숫자 유형은 크기를 지정하는 dp 및 sp와 같은 속성을 갖는 것을 볼 수 있다. (ex. padding(16.dp) -> 16dp 패딩 설정)
개발자가 클래스를 작성할 때 다른 개발자가 이를 어떻게 사용하거나 사용할 계획인지 정확히 알 수 없는 경우가 많다.
Kotlin에서는 기존 데이터 타입을 확장하여 해당 데이터 타입의 일부인 것처럼 점 문법으로 액세스할 수 있는 속성과 메소드를 추가할 수 있다.
Kotlin에서 부동 소수점 유형을 작업하지 않은 개발자 (Ex. Compose 라이브러리를 빌드하는 개발자)는 UI 크기와 관련된 속성과 메소드를 추가할 수 있다.
확장 속성을 정의하려면 변수 이름 앞에 유형 이름과 점 연산자(.)를 추가한다.
class Quiz {
companion object StudentProgress {
var total: Int = 10
var answered: Int = 3
}
}
val Quiz.StudentProgress.progressText: String
get() = "${answered} of ${total} answered"
fun main() {
println(Quiz.progressText)
}
3 of 10 answered
확장 속성은 데이터를 저장할 수 없으므로 get-only 여야 한다.
확장 함수를 정의하려면 함수 이름 앞에 유형 이름과 점 연산자(.)를 추가한다.
class Quiz {
companion object StudentProgress {
var total: Int = 10
var answered: Int = 3
}
}
fun Quiz.StudentProgress.printProgressBar() {
repeat(Quiz.answered) { print("▓") }
repeat(Quiz.total - Quiz.answered) { print("▒") }
println()
println(Quiz.progressText)
}
fun main() {
Quiz.printProgressBar()
}
▓▓▓▒▒▒▒▒▒▒
3 of 10 answered