728x90

코틀린 인터페이스

- Java 와 달리 인터페이스 함수가 구현부를 가질 수도 있고, 추상함수만 가질 수도 있다.

- 상속과 마찬가지로 콜론(:)을 사용해서 인터페이스를 구현한다.

  자바에서는 클래스의 상속과 인터페이스의 구현을 extends 와 implements로 구분한다.

- 상속은 한번에 하나밖에 안되지만, 인터페이스는 콤마(,)로 여러개를 구현 가능하다.

   또한, 콜론(:)으로 동시에 클래스 상속과 인터페이스 구현이 가능하다.

- 코틀린에서는 상속받거나 구현한 함수의 앞에 무조건 override 키워드를 붙이도록 강제한다.

  Java에서는 부모 클래스의 메서드를 재정의하거나 인터페이스 구현 메서드를 @Override 어노테이션으로 구분한다.
  하지만 @Override 어노테이션 추가는 선택 사항이라 메서드의 유형을 코드만으로 구분하기는 어렵다.


fun main(args: Array<String>) {
    var a = Person()
    a.click()
    a.run()
}

interface Clickable {
    // 일반함수 : open 함수로 간주한다.
    fun click() {
        println("버튼을 눌렀어요.")
    }
}

interface Runner {
    // 추상함수 : abstract 함수로 간주한다.
    fun run()
}

class Person : Runner, Clickable {
    override fun run(){
        println("성큼 성큼 달린다.")
    }
} 


만약, 인터페이스 내의 함수들이 구현체가 있고, 중복된 함수가 있을 경우에는 어떻게 할까?

필요한 클래스의 super 를 호출할 수 있다. 둘 다 혹은 필요한 클래스의 함수만 호출해도 된다.


fun main(args: Array<String>) {
    var a = Person()
    a.click()
    a.run()
}

interface Clickable {
    // 일반함수 : open 함수로 간주한다.
    fun click() {
        println("클릭 버튼을 눌렀어요.")
    }
}

interface Runner {
    // 추상함수 : abstract 함수로 간주한다.
    fun run()
    fun click() {
        println("Runner 버튼을 눌렀어요.")
    }
}

class Person : Runner, Clickable {
    override fun run(){
        println("성큼 성큼 달린다.")
    }

    override fun click() {
        super<Clickable>.click()
        super<Runner>.click()
    }
}
 


728x90

'안드로이드 > Kotlin 문법' 카테고리의 다른 글

코틀린 접근 제한자  (0) 2020.01.14
코틀린 패키지  (0) 2020.01.13
코틀린 추상클래스  (0) 2020.01.12
코틀린(Kotlin) 클래스 선언 및 상속  (0) 2020.01.12
코틀린 기본 이해  (0) 2020.01.07
블로그 이미지

Link2Me

,