코틀린 인터페이스

siwan·2021년 11월 15일
0

코틀린 인터페이스

코틀린 인터페이스는 자바 8 인터페이스와 비슷하다. 안에는 추상 메소드뿐 아니라 구현이 있는 메소드도 정의 할 수 있다.

interface clickable {
  fun click()
}

위 코드는 추상 메소드가 있는 인터페이스를 정의 한다. 이 인터페이스를 구현하는 모든 비추상 클래스에 대한 구현을 제공 해야한다.

class Button0:ClickAble{
    override fun click() = println("I was clicked")
}
val btn = Button0()
btn.click()
>>>I was clicked

자바에서는 extends와 implements 키워드를 이용하지만 코틀린에서는 클래스 이름 뒤에 콜론(:)뒤에 상속 받을 클래스 또는 인터페이스를 정의한다.
자바의 @Override 애노테이션과 비슷한 override 변경자는 상위 클래스나 상위 인터페이스에 있는 프로퍼티나 메소드를 오버라이드 한다는 뜻이다.

---디폴트가 있는 메소드 정의

interface ClickAble{
    fun click()
    fun showOff()= println("i'm click able")
}

/** class Button0: **/
val btn = Button0()
btn.showOff()
>>>i'm click able

인터페이스 내에 디폴트가 있는 메소드는 클래스 내에서 오버라이드 할 필요 없이 바로 사용이 가능하다.

만약 2개를 상속한 인터페이스에 같은 이름의 함수값이 있으면 어떻게 처리해야할까??

interface ClickAble{
    fun showOff()= println("i'm click able")
}

interface Focusable{
    fun showOff()=pruntln("i'm focusable")
}

class Button0:ClickAble,Focusable{
    override fun showOff() {
        super<ClickAble>.showOff()
        super<Focusable>.showOff()
    }
}

val btn = Button0()
btn.showOff()

>>>i'm click able!
i'm focusable!

위 처럼 꺽쇠 기호 안에 인터페이스의 타입을 입력해서 부를 수 가 있다.
하지만 단 하나만 호출하게 된다면 어떻게 해야할지 알아보자

class Button0:ClickAble,Focusable{
    override fun showOff() = super<ClickAble>.showOff()
}

val btn = Button0()
btn.showOff()

>>>i'm click able!

자바에서 코틀린의 메소드가 있는 인터페이스 구현하기
자바의 인터페이스는 디폴트 메소드를 지원하지 않는다. 따라서 디폴트 메소드가 정적 메소드로 들어있는 클래스를 조합해 구현한다. 따라서 자바에서는 코틀린의 디폴트 메소드 구현에 의존 할 수 없다.

profile
station3 다방 안드로이드 개발자

0개의 댓글