brunch

코틀린(Kotlin) 추상클래스 & 인터페이스

빠르게 살펴보기

by 서준수

추상 클래스 (Abstract Class)

클래스와 일부 멤버가 abstract로 선언되면 추상 클래스입니다. abstract 멤버는 클래스 내에서 아무런 구현이 없습니다.


abstract class Student {

abstract fun learnKotlin()

fun learnJava() {}

}


추상 메서드는 반드시 재정의(override) 해야 합니다. 일반 멤버 메서드는 재정의 하려면 일반 상속과 마찬가지로 open 키워드를 명시해야 합니다.


abstract class Person {
open fun eat() {}
abstract fun sleep()
}

class Student : Person() {
override fun eat() {
super.eat()
}

override fun sleep() {}

fun study() {}
}



[Remind] 상속을 하려면 꼭 open을 선언해주어야 합니다. 왜냐하면 아무 선언이 없으면 코틀린 클래스는 기본적으로 Java의 final 클래스와 같기 때문입니다. 또한 non-abstract open 멤버를 abstract 멤버로 재정의 할 수 있습니다.


open class Person {

open fun needToSleep() {}

}


abstract class Student : Person() {

override abstract fun needToSleep()

abstract fun learnKotlin()

fun learnJava() {}

}



인터페이스 (Interface)

코틀린의 인터페이스는 Java8과 매우 유사합니다. abstract method 뿐 만 아니라 method의 구현도 가능합니다.


[Tip] 인터페이스라고 하면 모든 method가 abstract method인 것이라고 알고 있을 수도 있는데 Java8에서 default 키워드로 method 구현이 가능해졌습니다.


Java


public interface Person {

void needToSleep(); // interface 내에서는 abstract로 유추

default String getName() {

return "Hong";

}

}


코틀린


interface Person {

abstract fun needToSleep()

open fun getName():String = "Hong"

}


interface에서 구현한 method도 override 할 수 있습니다. 추상 클래스와 다르게 abstract와 open 키워드는 생략이 가능합니다.


interface Person {

fun needToSleep()

fun getName():String = "Hong"

}


class Student : Person {

override fun needToSleep() {


}

fun learnKotlin() {


}

override fun getName(): String {

return "Tom"

}

}


또한 다음과 같이 하나 이상의 interface를 구현할 수 있습니다.


interface Person {

fun needToSleep()

fun getName():String = "Hong"

}


interface Adult {

fun needToHoliday()

fun getName():String = "Choi"

}


class Student : Person, Adult {

override fun needToHoliday() {

}

override fun needToSleep() {


}

fun learnKotlin() {


}

override fun getName(): String {

return "Tom"

}

}


keyword
이전 08화코틀린 Getters and Setters #2