엄코딩의 개발 일지

 인터페이스



interface 클래스는 자바에서는 기본 틀을 만들어 주는 클래스로 내부에 함수 바디를 선언할 수도, 변수를 가질 수도 없었습니다.


하지만 코틀린에서는 interface 클래스 내부의 함수가 바디를 가질 수 있고 멤버 변수를 추상 변수로 만들어 사용할 수도 있으며,


get() / set()을 통해서 값을 지정할 수도 있습니다.


또한, interface 클래스를 상속 받을 때 자바에서는 implement라는 키워드를 사용했습니다.


하지만 코틀린에서는 콜론( 기호 : )을 사용합니다.


interface FinishDraw {
var distance:Int

open fun onFinishDraw()
}

open class Figure(var vertext:Int):FinishDraw{
override var distance: Int
get() = vertext
set(value) {}

override fun onFinishDraw() {
}
}


위의 코드에서 알 수 있듯이, interface 클래스에서 변수에 get()을 지정해 주지 않을 경우에 자식 클래스에서는 무조건 변수를 override를 

해주어야합니다.



만약, 상속 클래스 중 중복 함수가 있는 클래스에서는 어떻게 해야할까요?


아래 소스에서는 fun f()가 중복됨을 알 수 있습니다.

open class A {
open fun f() {}
fun a() {}
}

interface B{
fun f(){}
fun b(){}
}


이렇게 함수명이 같은 클래스를 상속 받아 함수를 오버라이드할 때는 부모 클래스 이름을 명시적으로 적어주어야 합니다.


class C :A(),B

{
override fun f() {
super<A>.f()
super<B>.f()
}
}


클래스 C에서는 클래스 A, B에 있는 f 함수를 둘다 호출했습니다.


하지만 둘 중에 필요한 super만 불러도 상관없습니다!