[kotlin] 추상 클래스에서 추상 메서드를 호출하는 이유

일반적으로, 추상 클래스는 추상 메서드를 포함할 수 있습니다. 그러나 이러한 추상 메서드가 호출되지 않고 남겨진 채로 있는 이유는 무엇일까요?

다형성과 유연성

다형성은 객체 지향 프로그래밍의 중요한 특징 중 하나입니다. 추상 클래스는 다형성을 구현하는데 도움이 됩니다. 파생 클래스에서 추상 메서드를 오버라이드하여 다양한 동작을 수행할 수 있기 때문입니다.

추상 클래스의 추상 메서드는 파생 클래스들이 특정한 방법으로 구현할 것을 강제함으로써, 유연하고 강력한 코드를 작성할 수 있도록 합니다.

런타임 다형성

또 다른 이유는 런타임 다형성입니다. 추상 메서드는 런타임에 파생 클래스의 오버라이딩 된 버전을 호출할 수 있도록 합니다.

예를 들어, 다음과 같은 Kotlin 코드를 살펴보겠습니다:

abstract class Shape {
    abstract fun draw()
}

class Circle : Shape() {
    override fun draw() {
        println("Drawing a circle")
    }
}

fun main() {
    val shape: Shape = Circle()
    shape.draw() // 이 부분에서 Circle 클래스의 draw 메서드가 호출됩니다.
}

위의 예제에서, Shape 타입의 변수가 Circle 객체를 참조하고 있습니다. 그러나 런타임에 실제로 호출되는 메서드는 Circle 클래스의 draw 메서드입니다.

결론

추상 클래스에서 추상 메서드를 호출하는 이유는, 다형성을 구현하고 유연성을 확보하며 런타임 다형성을 지원하기 위함입니다. 이를 통해 코드의 확장성과 유지보수성을 높일 수 있습니다.

참고 자료: Kotlin - Abstract Classes