[kotlin] 코틀린에서 상속과 인터페이스를 함께 사용하는 상황

코틀린은 객체지향 프로그래밍에서 상속과 인터페이스를 함께 사용할 수 있는 다중 상속을 지원하는 언어입니다. 이것은 개발자에게 다양한 유연성과 재사용성을 제공합니다.

상속과 인터페이스의 차이

상속은 클래스 간에 코드를 공유하고 재사용하는 방법입니다. 부모 클래스에서 정의된 메서드와 속성을 자식 클래스에서 물려받아 사용할 수 있습니다. 반면, 인터페이스는 구현을 갖지 않고 추상 메서드의 집합으로 구성됩니다. 클래스는 인터페이스를 구현하여 인터페이스에서 정의한 동작을 제공해야 합니다.

상속과 인터페이스를 함께 사용하는 예시

open class Animal {
    fun eat() {
        println("Animal is eating")
    }
}

interface CanRun {
    fun run()
}

interface CanSwim {
    fun swim()
}

class Dog : Animal(), CanRun {
    override fun run() {
        println("Dog is running")
    }
}

class Fish : Animal(), CanSwim {
    override fun swim() {
        println("Fish is swimming")
    }
}

class Duck: Animal(), CanRun, CanSwim {
    override fun run() {
        println("Duck is running")
    }

    override fun swim() {
        println("Duck is swimming")
    }
}

fun main() {
    val dog = Dog()
    dog.eat()
    dog.run()

    val fish = Fish()
    fish.eat()
    fish.swim()

    val duck = Duck()
    duck.eat()
    duck.run()
    duck.swim()
}

위의 예시에서는 Animal 클래스를 상속받은 DogFish 클래스가 각각 CanRun 인터페이스와 CanSwim 인터페이스를 구현하고 있습니다. 또한 Duck 클래스는 Animal 클래스와 CanRun 인터페이스, CanSwim 인터페이스를 함께 구현하고 있습니다.

이렇게 상속과 인터페이스를 함께 사용하면 클래스들 간에 코드를 공유하고 다양한 기능을 추가로 제공할 수 있습니다. 이를 통해 더욱 유연하고 확장 가능한 코드를 작성할 수 있습니다.