인터페이스
공통적으로 필요한 기능을 외부에서 추가하는 것
기본 개념
- 코틀린은 부모 클래스가 반드시 1개라서 모두 상속으로 처리 불가능
- 근본적인 공통점: 상속받아서 사용
- 그 외의 기능: 인터페이스로 추가
- 코틀린은 interface 키워드로 인터페이스를 구현
인터페이스 사용 이유
- 상속을 이용해서 클래스 관계를 구분해도, 자식 클래스가 부모와는 다른 특성을 가지고 싶음
- 예를 들어 '동물'이라는 부모 클래스와, '소', '오리', '돼지', '악어'라는 자식 클래스가 있을 때
- 부모 클래스 동물에 '숨을 쉰다.' 처럼 공통적인 내용을 추가함
- '악어' 클래스에만 넣을 수 있는 '데스롤을 한다.'라는 행위(메서드)를 추가하고 싶다면 인터페이스를 사용
인터페이스 기본 구조
- 추상 메서드: 아래 코드처럼 메서드의 로직이 존재하지 않고 이름만 존재하는 것
- 인터페이스는 일반적으로 추상 메서드로 작성한다.
interface 인터페이스이름 {
fun 메서드이름()
}
예시
interface WaterBirdBehavior {
fun swim()
}
fun main() {
var bird = Bird("새")
var chicken = Chicken("닭")
var sparrow = Sparrow("참새")
var pigeon = Pigeon("비둘기")
var duck = Duck("오리")
bird.fly()
chicken.fly()
sparrow.fly()
pigeon.fly()
duck.swim()
}
open class Bird(name:String) {
var name: String = ""
init {
this.name = name
}
fun fly() {
println("${name} 날아요~")
}
}
class Chicken(name: String) : Bird(name) {
}
class Sparrow(name: String) : Bird(name) {
}
class Pigeon(name: String) : Bird(name) {
}
class Duck(name: String) : Bird(name), WaterBirdBehavior {
override fun swim() {
println("${name}가 수영해요~")
}
}
참고자료
https://kotlinlang.org/docs/interfaces.html