Kotlin

[Kotlin/Java] 코틀린과 자바의 추상 클래스&메서드 차이점 비교

yujinius 2024. 7. 22. 17:18

❓ Kotlin의 추상 클래스&메서드 Java랑은 어떻게 다른가?

Java의 추상 클래스와 메서드

Java 추상 클래스와 메서드 정의

  • Java에서 추상 클래스와 메서드는 abstract 키워드를 사용하여 선언
  • 추상 클래스는 인스턴스를 생성할 수 없으며, 추상 메서드는 구현을 가지지 않음
  • 서브클래스는 추상 메서드를 반드시 구현해야 함
  •  
  • abstract class Polygon { abstract void draw(); // Polygon은 추상 클래스이며, draw는 추상 메서드 } class Rectangle extends Polygon { @Override void draw() { // Rectangle 클래스는 Polygon을 상속받고, draw 메서드를 구현 } }
  • Java에서는 추상 메서드나 클래스에 추가적인 키워드(open 등)를 사용할 필요가 없음
  • 추상 클래스는 기본적으로 서브클래스에서 상속할 수 있으며, 추상 메서드는 기본적으로 오버라이드 가능

비추상 메서드를 추상 메서드로 오버라이드하기

  • Java에서는 비추상 메서드를 추상 메서드로 오버라이드할 수 없음
  • Java의 문법상, 이미 구현된 메서드를 추상 메서드로 변경할 수 없기 때문에, Kotlin과 같은 방식은 Java에서 지원되지 않음!!
  • 비추상 메서드를 오버라이드하기 위해서는 다음과 같이 해야 함
  • open class Polygon {
        void draw() {
            // some default polygon drawing method
        }
    }
    
    abstract class WildShape extends Polygon {
        @Override
        abstract void draw();
    }
    • Java에서는 Polygon 클래스의 draw 메서드를 WildShape 클래스에서 추상 메서드로 오버라이드할 수 없다.
    • 대신, WildShape 클래스에서 draw 메서드를 재정의하여 특정 서브클래스가 해당 메서드를 구현하도록 할 수는 있다.
    • 이 방식은 Kotlin에서 제공하는 것과 동일하지 않음.

💫 Java와 Kotlin의 추상 클래스&메서드 차이 결론

  • Kotlin에서는 추상 클래스와 메서드에 대해 더 유연한 기능을 제공
  • Kotlin에서는 비추상 메서드를 추상 메서드로 오버라이드할 수 있는 기능이 있으나, Java는 이러한 기능 제공X
  • Kotlin의 이러한 특성은 더 유연한 설계를 가능하게 함