Kotlin

[Kotlin/Java] 코틀린과 자바의 상속과 open 키워드 관련 차이점 비교 분석

yujinius 2024. 7. 22. 17:21

❓ Kotlin, Java에서의 상속과 open 관련 차이점은?

  • Kotlin의 open 키워드와 Java의 클래스 및 메서드 상속 방식은 몇 가지 중요한 차이점이 있다.
  • 다음은 Java와 Kotlin의 상속 관련 주요 차이점을 비교한 내용이다..

Java에서의 상속

클래스 상속

  • 기본적으로 상속 가능:
    • Java에서 클래스는 기본적으로 상속이 가능하다.
    • 특별히 final로 선언되지 않는 한, 모든 클래스는 상속될 수 있다.
  • final 키워드:
    • 클래스를 상속할 수 없도록 하려면 final 키워드를 사용해야 한다.
class Polygon {
    // 상속 가능
}

final class Rectangle extends Polygon {
    // 이 클래스는 더 이상 상속될 수 없습니다.
}

메서드 오버라이드

  • 기본적으로 오버라이드 가능:
    • Java에서 메서드는 기본적으로 오버라이드 가능하다.
    • 특별히 final로 선언되지 않는 한, 모든 메서드는 서브클래스에서 오버라이드할 수 있다.
  • final 키워드:
    • 메서드를 오버라이드할 수 없도록 하려면 final 키워드를 사용해야 한다.
class Polygon {
    void draw() {
        System.out.println("Drawing a polygon");
    }

    final void fill() {
        System.out.println("Filling the polygon");
    }
}

class Rectangle extends Polygon {
    @Override
    void draw() {
        System.out.println("Drawing a rectangle");
    }

    // fill() 메서드는 오버라이드할 수 없습니다.
}

Kotlin에서의 상속

클래스 상속

  • 기본적으로 상속 불가능:
    • Kotlin에서 클래스는 기본적으로 상속이 불가능하다.
    • 특별히 open으로 선언되지 않는 한, 모든 클래스는 상속될 수 없다.
  • open 키워드:
    • 클래스를 상속할 수 있도록 하려면 open 키워드를 사용해야 한다.
open class Polygon {
    // 상속 가능
}

class Rectangle : Polygon() {
    // Polygon을 상속받은 클래스
}

메서드 오버라이드

  • 기본적으로 오버라이드 불가능:
    • Kotlin에서 메서드는 기본적으로 오버라이드가 불가능하다.
    • 특별히 open으로 선언되지 않는 한, 모든 메서드는 서브클래스에서 오버라이드할 수 없다.
  • open 키워드:
    • 메서드를 오버라이드할 수 있도록 하려면 open 키워드를 사용해야 한다.
open class Polygon {
    open fun draw() {
        println("Drawing a polygon")
    }

    fun fill() {
        println("Filling the polygon")
    }
}

class Rectangle : Polygon() {
    override fun draw() {
        println("Drawing a rectangle")
    }

    // fill() 메서드는 오버라이드할 수 없습니다.
}

💫 주요 차이점 요약

  1. 클래스 상속 기본 설정:
    • Java: 기본적으로 상속 가능, final로 상속 불가능하게 설정.
    • Kotlin: 기본적으로 상속 불가능, open으로 상속 가능하게 설정.
  2. 메서드 오버라이드 기본 설정:
    • Java: 기본적으로 오버라이드 가능, final로 오버라이드 불가능하게 설정.
    • Kotlin: 기본적으로 오버라이드 불가능, open으로 오버라이드 가능하게 설정.

이러한 차이점은

  1. Kotlin이 더 명시적으로 상속 및 오버라이드를 관리할 수 있도록 해주며,
  2. 의도하지 않은 상속이나 오버라이드로 인한 오류를 방지하는 데 도움을 준다.

Kotlin에서는 상속 및 오버라이드가 필요한 경우에만 명시적으로 open 키워드를 사용하여 이를 허용하는 방식으로 설계되었다.