
💗 추상 클래스 Abstract classes
- 클래스는 일부 또는 모든 멤버와 함께 abstract로 선언될 수 있음
- 추상 멤버는 클래스에 구현이 없음. { } 부분 존재X
- 서브 클래스는 추상 메서드를 반드시 구현해야 함 = Overriding
- 추상 클래스나 함수를 open으로 어노테이션할 필요는 없음
- 추상 클래스는 기본적으로 서브클래스에서 상속할 수 있으며, 추상 메서드는 기본적으로 오버라이드 가능
abstract class Polygon {
abstract fun draw()
// Polygon은 추상 클래스이며, draw는 추상 메서드
}
class Rectangle : Polygon() {
override fun draw() {
// Rectangle 클래스는 Polygon을 상속받고, draw 메서드를 구현
}
}
비추상 open 멤버를 추상 멤버로 재정의할 수 있음
- Kotlin에서는 비추상 메서드(기본 구현을 가지는 메서드)를 추상 메서드로 오버라이드할 수 있음
open class Polygon {
open fun draw() {
// Polygon 클래스는 기본 구현을 가진 draw 메서드를 가지고 있음
}
}
abstract class WildShape : Polygon() {
// WildShape를 상속하는 클래스는 Polygon의 기본 그리기 메서드 대신
// 자체 그리기 메서드를 제공해야 함
abstract override fun draw()
// = WildShape는 Polygon을 상속받지만, draw 메서드를 추상 메서드로 오버라이드하여 서브클래스들이 자신의 draw 메서드를 제공하도록 강제함
}
💫 Kotlin에서 open 키워드란 무엇인가?
- Kotlin에서 open 키워드는 클래스나 메서드를 서브클래스에서 상속하거나 오버라이드할 수 있도록 허용하는 데 사용
- 기본적으로 Kotlin의 클래스와 메서드는 final로 선언되어 상속이나 오버라이드가 불가능하기 때문에, 이를 변경하고자 할 때 open 키워드를 사용
클래스에 대한 open 키워드
- 기본적으로 Kotlin의 클래스는 상속이 불가능
- 즉, 어떤 클래스가 상속되도록 하려면 open 키워드로 명시적으로 선언해야 한다.
- 위의 예제에서 Polygon 클래스는 open 키워드를 사용하여 상속이 가능하도록 선언되었고, Rectangle 클래스는 Polygon을 상속받을 수 있다.
open class Polygon {
// 이 클래스는 상속될 수 있다.
}
class Rectangle : Polygon() {
// 이 클래스는 Polygon을 상속받는다.
}
메서드에 대한 open 키워드
- 기본적으로 Kotlin의 메서드도 오버라이드가 불가능하다.
- 오버라이드 가능하도록 하려면 메서드에도 open 키워드를 사용해야 한다.
- 위의 예제에서 Polygon 클래스의 draw 메서드는 open 키워드로 선언되어 서브클래스에서 오버라이드할 수 있다.
- Rectangle 클래스에서 draw 메서드를 오버라이드하여 자신의 구현을 제공한다.
open class Polygon {
open fun draw() {
println("Drawing a polygon")
}
}
class Rectangle : Polygon() {
override fun draw() {
println("Drawing a rectangle")
}
}
정리
- 기본적으로 모든 클래스와 메서드는 final:
- Kotlin에서 클래스와 메서드는 기본적으로 final로 간주되어 상속과 오버라이드가 불가능
- 클래스에 open 키워드 사용:
- 클래스가 상속될 수 있도록 허용하려면 open 키워드를 사용해야 한다.
- 메서드에 open 키워드 사용:
- 메서드가 오버라이드될 수 있도록 허용하려면 open 키워드를 사용해야 한다.
- 이렇게 open 키워드는 Kotlin의 클래스와 메서드가 명시적으로 상속이나 오버라이드 가능하도록 만들어주는 중요한 역할을 한다.
- 이로 인해 코드의 의도를 명확하게 하고, 상속 구조를 보다 명확하게 관리할 수 있다.
[Kotlin/Java] 코틀린과 자바의 추상 클래스&메서드 차이점 비교 참고
https://yujinius45.tistory.com/102
[Kotlin/Java] 코틀린과 자바의 추상 클래스&메서드 차이점 비교
❓ Kotlin의 추상 클래스&메서드 Java랑은 어떻게 다른가?Java의 추상 클래스와 메서드Java 추상 클래스와 메서드 정의Java에서 추상 클래스와 메서드는 abstract 키워드를 사용하여 선언추상 클래스는
yujinius45.tistory.com
[Kotlin/Java] 코틀린과 자바의 상속과 open 키워드 관련 차이점 비교 분석 참고
https://yujinius45.tistory.com/103
[Kotlin/Java] 코틀린과 자바의 상속과 open 키워드 관련 차이점 비교 분석
❓ Kotlin, Java에서의 상속과 open 관련 차이점은?Kotlin의 open 키워드와 Java의 클래스 및 메서드 상속 방식은 몇 가지 중요한 차이점이 있다.다음은 Java와 Kotlin의 상속 관련 주요 차이점을 비교한 내
yujinius45.tistory.com
'Kotlin' 카테고리의 다른 글
| [Kotlin/Java] 코틀린에서 Unit 이해하기 (void 친구): 싱글톤과 타입, 객체의 차이점 (1) | 2024.07.22 |
|---|---|
| [Kotlin] 싱글톤(Singleton)을 사용하는 이유 : kotlin object (1) | 2024.07.22 |
| [Kotlin/Java] 코틀린과 자바의 상속과 open 키워드 관련 차이점 비교 분석 (2) | 2024.07.22 |
| [Kotlin/Java] 코틀린과 자바의 추상 클래스&메서드 차이점 비교 (0) | 2024.07.22 |
| [Kotlin] 코틀린에서의 상속(Inheritance)과 파생 클래스의 초기화 순서(Derived class initialization order), 슈퍼 클래스 구현 호출 (1) | 2024.07.22 |