[kotlin] 추상 클래스를 이용한 다형성과 다중 상속의 혼용

다형성(polymorphism)과 다중 상속(multiple inheritance)은 객체지향 프로그래밍에서 중요한 개념입니다. Kotlin의 추상 클래스를 이용하면 이 두 가지 개념을 혼용하여 유연한 객체 모델을 구현할 수 있습니다.

다형성(Polymorphism)의 개념

다형성은 같은 이름의 메서드가 서로 다른 클래스에서 다른 방식으로 동작하는 것을 말합니다. 이는 상속과 관련이 있으며, 한 클래스가 다른 클래스로부터 속성과 행위를 상속받을 때 발생합니다.

다중 상속(Multiple Inheritance)의 제약

일부 객체지향 언어들은 다중 상속을 허용하지 않습니다. 다중 상속을 사용하면 하나의 클래스가 여러 부모 클래스로부터 상속받을 수 있지만, 이로 인해 다이아몬드 문제(diamond problem)가 발생할 수 있습니다.

Kotlin의 추상 클래스

Kotlin은 단일 상속만 허용하는데, 다중 상속의 문제를 해결하기 위해 인터페이스(interface)추상 클래스(abstract class) 를 제공합니다.

추상 클래스의 활용

추상 클래스는 추상 메서드(abstract method)와 구현된 메서드를 모두 포함할 수 있습니다. 따라서 추상 클래스를 상속받는 하위 클래스에서 추상 메서드를 구현하거나 오버라이드하고, 구현된 메서드를 재사용할 수 있습니다.

abstract class Shape {
    abstract fun calculateArea(): Double
    open fun printName() {
        println("This is a shape.")
    }
}

class Circle(val radius: Double) : Shape() {
    override fun calculateArea(): Double {
        return Math.PI * radius * radius
    }
    
    override fun printName() {
        println("This is a circle.")
    }
}

위의 예시에서 Shape 클래스는 추상 클래스로, calculateArea 메서드는 추상 메서드로 선언되고, printName 메서드는 구현이 되어 있습니다. 이 클래스를 상속받은 Circle 클래스는 calculateArea 메서드를 오버라이딩하고, printName 메서드도 오버라이딩하여 재정의하였습니다.

이처럼 Kotlin의 추상 클래스를 이용하면 다중 상속의 문제없이 다형성을 활용할 수 있습니다.

결론

Kotlin의 추상 클래스를 이용하여 다형성과 다중 상속의 혼용을 구현할 수 있습니다. 이를 통해 유연하고 강력한 객체 모델을 구현할 수 있으며, 한정적인 다중 상속 문제를 우회할 수 있습니다.

참고문헌: Kotlin 공식 문서