[Kotlin] 인터페이스를 사용하여 확장 함수 다시 작성

문승연·2023년 7월 31일
0

Kotlin 기본

목록 보기
6/11

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

이전 포스트에서는 코드를 직접 추가하지 않고 확장 속성 및 확장 함수를 사용하여 클래스에 속성 및 메소드를 추가하는 방법을 알아봤다.

하지만 클래스 확장이 항상 필요하지는 않으며 특정 메소드나 속성이 존재해야 한다는 점을 제외하고 어떤 구현이 필요한 지 모르는 경우도 있다.

동일한 추가 속성과 메소드를 갖는 여러 클래스(동작은 다를 수 있음)가 필요한 경우 인터페이스를 사용하여 그러한 속성과 메소드를 정의할 수 있다.

인터페이스는 중괄호 내에 인터페이스를 준수하는 모든 클래스가 구현해야 하는 메소드 or get-only 속성을 정의할 수 있다.

인터페이스(interface)는 일종의 계약이다. 인터페이스를 준수하는 클래스를 인터페이스를 확장한다고 말한다.

클래스는 콜론(:)과 공백, 인터페이스 이름을 차례로 사용하여 인터페이스를 확장하려고 함을 선언할 수 있다.

클래스가 인터페이스를 확장하면 인터페이스에서 지정된 모든 속성과 메소드를 구현해야 한다.

따라서 인터페이스가 수정되는 경우 인터페이스를 확장하는 모든 클래스를 업데이트해야 한다.

interface ProgressPrintable {
    val progressText: String
    fun printProgressBar()
}

class Quiz : ProgressPrintable {	
    
    override val progressText: String
    	get() = "${answered} of ${total} answered"
    override fun printProgressBar() {
        repeat(Quiz.answered) { print("▓") }
    	repeat(Quiz.total - Quiz.answered) { print("▒") }
    	println()
    	println(progressText)
	}
    
    companion object StudentProgress {
        var total: Int = 10
        var answered: Int = 3
    }
}

fun main() {
    Quiz().printProgressBar()
}
▓▓▓▒▒▒▒▒▒▒
3 of 10 answered
profile
"비몽(Bemong)"이라는 앱을 개발 및 운영 중인 안드로이드 개발자입니다.

0개의 댓글