본문 바로가기
Kotlin Language/Kotlin 기본 문법

Kotlin(코틀린) - 상속(inheritance)

by Classic Master 2023. 12. 1.
728x90

상속 (inheritance)

  • 상속은 클래스 간의 관계를 정의하고 부모 클래스의 특성을 자식 클래스에서 사용할 수 있도록 하거나, 클래스들의 공통점을 찾아낼 때 유용하게 사용할 수 있습니다.  상속은 객체 지향 프로그래밍의 중요한 개념 중 하나이며, 코드의 재사용성과 유연한 확장성을 높이는 데 기여합니다.

클래스 선언 안에서의 상속

  • 코틀린에서 클래스 간의 상속은 클래스 선언 부분에서 : (콜론)을 사용하여 정의됩니다. 부모 클래스와 자식 클래스 간의 상속 관계를 형성하려면 자식 클래스 선언부에서 부모 클래스를 명시해야 합니다
// 부모 클래스
open class Animal(val name: String) {
    fun makeSound() {
        println("소리")
    }
}

// 자식 클래스
class Dog(name: String) : Animal(name) {
    fun bark() {
        println("왕왕!")
    }
}
  • 위의 예제에서 Dog 클래스는 Animal 클래스를 상속받고 있습니다. [ : ]뒤에 부모 클래스의 이름을 명시하여 상속 관계를 나타냅니다. 이렇게 하면 Dog 클래스는 Animal 클래스의 특성을 물려받아 사용할 수 있습니다.

Open 키워드와 Method Overriding (메소드 오버라이딩)

  • 코틀린에서는 상속을 허용하려면 부모 클래스에서 상속받을 메소드나 프로퍼티에 open 키워드를 사용해야 합니다. 또한 자식 클래스에서 부모 클래스의 멤버를 오버라이딩하려면 override 키워드를 사용해야 합니다.
open class Animal {
    open fun makeSound() {
        println("강아지 소리")
    }
}
class Dog : Animal() {
    override fun makeSound() { 
        println("멍멍!")
    }
}
//부모 클래스의 함수를 사용하기 위해서는 함수 앞에 override 키워드를 붙여주면 됩니다.

Property Overriding (프로퍼티 오버라이딩)

  • 프로퍼티(property)의 오버라이딩은 메소드 오버라이딩과 유사한 규칙을 따릅니다. 부모 클래스의 프로퍼티를 자식 클래스에서 오버라이딩하려면 몇 가지 규칙을 준수해야 합니다.
open class Parent {
    open val property: Int = 0
}
class Child : Parent() {
    override val property: Int = 1
}
  • 프로퍼티 오버라이딩에서는 커스텀 getter나 setter를 제공할 수 있습니다.
  • 오버라이딩된 프로퍼티는 초기값을 제공할 수 있으며, 이는 부모 클래스에서의 초기값과 다를 수 있습니다.
  • 프로퍼티 오버라이딩에서는 field 식별자를 사용하여 부모 클래스의 프로퍼티에 접근할 수 있습니다.

최상위 클래스 Any

  • 클래스에 상위타입을 선언하지 않으면 Any가 상속되며, 코틀린의 최상위 클래스는 Any이다.
class Name1 // 암시적인 Any상속
class Name2 : Any() // 명시적인 Any상속

주의사항

  • 상속을 적절하게 사용하고 부모 클래스와 자식 클래스 간의 관계를 신중하게 설계해야 합니다. 상속을 오용하면 코드의 복잡성이 증가할 수 있으므로, 항상 디자인 원칙을 고려하여 사용하는 것이 중요합니다.
  • 서브 클래스는 슈퍼 클래스에 존재하는 속성과 같은 이름의 속성을 가질 수 없습니다.
  • 서브 클래스가 생성될때는 슈퍼클래스를 반드시 같이 호출해야 됩니다.
728x90
반응형