[Kotlin] 클래스 확장

문승연·2023년 7월 31일
0

Kotlin 기본

목록 보기
5/11
post-thumbnail

이 포스트는 아래의 Android 공식 홈페이지에서 제공하는 Codelab을 기반으로 작성되었습니다.
https://developer.android.com/codelabs/basic-android-kotlin-compose-generics?hl=ko#0

Compose로 작업할 때 Double과 같은 숫자 유형은 크기를 지정하는 dpsp와 같은 속성을 갖는 것을 볼 수 있다. (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
profile
"비몽(Bemong)"이라는 앱을 개발 및 운영 중인 안드로이드 개발자입니다.

0개의 댓글