코틀린에서 클래스 상속은 자바와 비슷한 방식으로 동작합니다. 자식 클래스는 부모 클래스의 메소드를 오버라이드할 수 있습니다. 이는 부모 클래스에 정의된 메소드를 자식 클래스에서 새로운 구현으로 대체하는 것을 의미합니다.
코틀린에서는 override 키워드를 사용하여 메소드를 오버라이드할 수 있습니다. 오버라이드된 메소드는 부모 클래스의 메소드와 이름, 매개변수, 반환 유형이 동일해야 합니다. 그러나 자식 클래스에서는 메소드 구현을 변경할 수 있습니다.
다음은 Animal
클래스를 상속받아 Cat
클래스에서 makeSound()
메소드를 오버라이드하는 예시 코드입니다.
open class Animal {
open fun makeSound() {
println("The animal makes a sound")
}
}
class Cat : Animal() {
override fun makeSound() {
println("Meow")
}
}
이 예시에서 Animal
클래스의 makeSound()
메소드는 open
키워드로 선언되었기 때문에, Cat
클래스에서 이를 오버라이드할 수 있습니다. Cat
클래스에서 오버라이드된 makeSound()
메소드는 "Meow"를 출력합니다.
super
키워드를 사용하여 부모 클래스의 메소드를 호출할 수 있습니다.open
키워드를 사용하여 오버라이드할 수 있는 메소드를 선언해야 합니다. 만약 부모 클래스에서 메소드가 final
로 선언되어 있다면, 오버라이드할 수 없습니다.코틀린에서는 또한 익스텐션(Extension)이라는 기능이 있습니다. 익스텐션은 이미 존재하는 클래스에 새로운 기능을 추가합니다. 이를 통해 기존 클래스의 코드를 수정하지 않고도 새로운 기능을 추가할 수 있습니다.
익스텐션을 사용하려면 클래스 이름 뒤에 점(.)을 붙이고, 새로운 메소드 이름을 정의합니다. 이를 활용하여 기존 클래스에 새로운 메소드를 추가할 수 있습니다. 새로운 메소드는 클래스 내부의 다른 메소드와 같은 방식으로 작동합니다.
코틀린의 오버라이드와 익스텐션은 각각 클래스 상속과 클래스 확장을 위한 강력한 기능입니다. 코드의 재사용성을 높이고, 새로운 기능을 추가하거나 기존 기능을 수정할 수 있는 유연성을 제공합니다.
다음은 String
클래스에 addExclamation()
메소드를 추가하는 익스텐션 예시 코드입니다.
fun String.addExclamation(): String {
return "$this!"
}
이 예시에서 String
클래스에 addExclamation()
메소드를 추가하고 있습니다. addExclamation()
메소드는 문자열 뒤에 느낌표를 추가하여 반환합니다. 이제 String
클래스의 인스턴스에서 addExclamation()
메소드를 호출할 수 있습니다.
val greeting = "Hello"
println(greeting.addExclamation()) // 출력: "Hello!"
위 예시에서 addExclamation()
메소드를 사용하여 "Hello!"를 출력합니다.