
❓ 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() 메서드는 오버라이드할 수 없습니다.
}
💫 주요 차이점 요약
- 클래스 상속 기본 설정:
- Java: 기본적으로 상속 가능, final로 상속 불가능하게 설정.
- Kotlin: 기본적으로 상속 불가능, open으로 상속 가능하게 설정.
- 메서드 오버라이드 기본 설정:
- Java: 기본적으로 오버라이드 가능, final로 오버라이드 불가능하게 설정.
- Kotlin: 기본적으로 오버라이드 불가능, open으로 오버라이드 가능하게 설정.
이러한 차이점은
- Kotlin이 더 명시적으로 상속 및 오버라이드를 관리할 수 있도록 해주며,
- 의도하지 않은 상속이나 오버라이드로 인한 오류를 방지하는 데 도움을 준다.
Kotlin에서는 상속 및 오버라이드가 필요한 경우에만 명시적으로 open 키워드를 사용하여 이를 허용하는 방식으로 설계되었다.
'Kotlin' 카테고리의 다른 글
| [Kotlin] 싱글톤(Singleton)을 사용하는 이유 : kotlin object (1) | 2024.07.22 |
|---|---|
| [Kotlin] 코틀린의 추상 클래스(Abstract classes)와 open 키워드 (0) | 2024.07.22 |
| [Kotlin/Java] 코틀린과 자바의 추상 클래스&메서드 차이점 비교 (0) | 2024.07.22 |
| [Kotlin] 코틀린에서의 상속(Inheritance)과 파생 클래스의 초기화 순서(Derived class initialization order), 슈퍼 클래스 구현 호출 (1) | 2024.07.22 |
| [Kotlin/Java] Java와 Kotlin의 상속 차이점과 다중 상속, 오버라이딩 규칙 비교 (1) | 2024.07.22 |