minstudio

11. 인터페이스와 상속 (Interfaces & Inheritance)

코틀린의 클래스는 기본적으로 상속 불가(final) 상태입니다. 상속을 허용하려면 부모 클래스에 반드시 open 키워드를 붙여야 합니다.

인터페이스는 자바 8과 유사하게 본문이 구현된 디폴트 메서드를 가질 수 있으며, 프로퍼티(추상 변수) 선언도 가능합니다. 다중 상속의 이점을 누리면서 역할과 구현을 깔끔하게 분리할 수 있습니다.

// 1. 인터페이스 정의
interface Flyable {
    val maxSpeed: Int // 인터페이스 안의 프로퍼티 (구현 클래스가 오버라이드 해야 함)
    
    fun fly() // 추상 메서드
    
    fun landing() { // 본문이 있는 디폴트 메서드
        println("안전하게 착륙합니다.")
    }
}

// 2. open 클래스 (상속 허용)
open class Animal(val name: String) {
    open fun makeSound() {
        println("$name 가 소리를 냅니다.")
    }
}

// 3. 상속과 인터페이스 다중 구현
// Animal() 을 상속받고, Flyable 을 구현함
class Bird(name: String, override val maxSpeed: Int) : Animal(name), Flyable {
    
    // 부모 클래스의 메서드 오버라이딩 (override 키워드 필수)
    override fun makeSound() {
        println("짹짹!")
    }

    // 인터페이스의 추상 메서드 오버라이딩
    override fun fly() {
        println("$name 가 최대 속도 $maxSpeed 로 하늘을 납니다!")
    }
}

fun main() {
    val sparrow = Bird("참새", 50)
    sparrow.makeSound()
    sparrow.fly()
    sparrow.landing() // 디폴트 메서드 사용
}
11. 인터페이스와 상속 (Interfaces & Inheritance) | Minstudio