Kotlin

[Kotlin] 코틀린의 추상 클래스(Abstract classes)와 open 키워드

yujinius 2024. 7. 22. 17:22

💗 추상 클래스 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