본문 바로가기
Programming/Kotlin

코틀린에서의 인터페이스

by Tarake 2024. 7. 31.

인터페이스


interface Vehicle {
    fun startEngine() // 추상 메소드

    fun stopEngine() { // 기본 구현
        println("Engine stopped.")
    }
}

class Car : Vehicle {
    override fun startEngine() {
        println("Car engine started.")
    }
}

fun main() {
    val myCar = Car()
    myCar.startEngine() // "Car engine started."
    myCar.stopEngine()  // "Engine stopped."
}

코틀린의 인터페이스는 추상 메소드뿐만 아니라 기본 구현도 포함할 수 있습니다. 기본 구현은 인터페이스를 구현하는 클래스에서 재정의하지 않아도 사용할 수 있는 메소드입니다.

 

인터페이스의 속성


interface User {
    val name: String // 추상 속성
    val age: Int
        get() = 0 // 기본 게터 제공
}

class Student(override val name: String) : User {
    // age 속성은 기본 게터를 사용하므로 재정의하지 않아도 됨
}

fun main() {
    val student = Student("Alice")
    println(student.name) // "Alice"
    println(student.age)  // "0"
}

인터페이스는 속성도 선언할 수 있으며, 이 속성들은 기본적으로 추상적이거나 기본 값을 제공할 수 있습니다.

인터페이스에서 선언된 속성은 백킹 필드를 가질 수 없으므로 인터페이스에서 선언된 접근자는 이를 참조할 수 없습니다.

 

인터페이스 상속


interface Animal {
    fun sound()
}

interface Pet : Animal {
    fun play()
}

class Dog : Pet {
    override fun sound() {
        println("멍")
    }

    override fun play() {
        println("Playing")
    }
}

fun main() {
    val myDog = Dog()
    myDog.sound() // "멍"
    myDog.play()  // "Playing"
}

인터페이스는 다른 인터페이스로부터 상속받을 수 있으며, 이를 통해 인터페이스 계층 구조를 만들 수 있습니다.

즉, 멤버에 대한 구현을 제공하고 새로운 함수와 속성을 선언할 수 있다는 의미입니다. 당연히 이러한 인터페이스를 구현하는 클래스는 누락된 구현만 정의하면 됩니다.

 

 

인터페이스 다중 상속


interface A {
    fun foo() { println("A") }
}

interface B {
    fun foo() { println("B") }
}

class C : A, B {
    override fun foo() {
        super<A>.foo() // A의 foo 호출
        super<B>.foo() // B의 foo 호출
    }
}

fun main() {
    val obj = C()
    obj.foo() // "A" "B"
}

코틀린은 클래스의 다중 상속을 허용하지 않지만, 인터페이스의 다중 상속은 가능합니다. 하나의 클래스가 여러 인터페이스를 구현할 수 있으며, 각 인터페이스에서 제공하는 메소드들을 선택적으로 재정의할 수 있습니다.

 

SAM (Single Abstract Method) 인터페이스


// SAM 인터페이스 정의
fun interface ClickListener {
    fun onClick()
}

// SAM 인터페이스를 사용하는 함수
fun setOnClickListener(listener: ClickListener) {
    listener.onClick()
}

// 람다 표현식을 사용하여 SAM 인터페이스 구현
fun main() {
    setOnClickListener {
        println("Button clicked")
    }
}

fun interface 키워드를 사용하여 SAM 인터페이스를 정의할 수 있습니다. 이 키워드는 SAM 인터페이스를 선언할 때만 사용됩니다.

SAM 인터페이스는 단 하나의 추상 메소드만을 가지는 인터페이스입니다. 이러한 인터페이스는 람다 표현식이나 메소드 참조로 인스턴스를 생성할 수 있습니다

 

 

 

출처

코틀린 공식 Docs

 

Interfaces | Kotlin

 

kotlinlang.org

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처

W3school

 

W3Schools.com

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

코틀린 공식 Docs

 

Classes | Kotlin

 

kotlinlang.org

 

'Programming > Kotlin' 카테고리의 다른 글

코틀린 접근 제한자  (0) 2024.08.03
코틀린 Nested 와 inner 클래스  (0) 2024.07.31
코틀린에서의 속성  (0) 2024.07.31
코틀린에서의 상속  (0) 2024.07.29
코틀린에서의 멤버함수(클래스 함수)  (0) 2024.07.29