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
반응형
'Kotlin Language > Kotlin 기본 문법' 카테고리의 다른 글
Kotlin(코틀린) - 접근제한자 (0) | 2023.12.05 |
---|---|
Kotlin(코틀린) - 람다함수 (Lambda Expression) (0) | 2023.12.03 |
Kotlin(코틀린) - 인터페이스(Interface) (0) | 2023.12.03 |
Kotlin(코틀린) - 생성자(init, Constructor) (0) | 2023.12.01 |
Kotlin(코틀린) - 생성자 클래스(Class) (0) | 2023.11.30 |
Kotlin(코틀린) - 콜렉션(Map, Set) (0) | 2023.11.30 |