
❓ 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의 이러한 특성은 더 유연한 설계를 가능하게 함