728x90
반응형
오버라이딩과 추상화
오버라이딩이란?
서브클래스가 슈퍼클래스를 상속받게되면 슈퍼클래스 안에 있는 함수와 동일한 이름의 함수를 가질 수 없다.
같은이름 다른 기능의 함수를 만들려면 override를 반드시 해줘야한다!
=> 즉 슈퍼클래스의 메서드를 서브클래스에서 재정의하는 것을 오버라이딩이라 한다.
슈퍼클래스의 함수에 open을 붙이면 서브클래스에서 오버라이딩이 가능하다.
fun main() {
Tiger().eat()
}
open class Animal{
open fun eat() {
println("음식을 먹습니다.")
}
}
class Tiger : Animal() {
override fun eat() {
println("고기를 먹습니다.")
}
}
위와같이 Animal 클래스의 eat()메서드를 Tiger에서 override를 통해 재정의 할 수 있다.
추상화
추상화란?
선언만 있고, 기능이 구현되지 않은 추상함수를 의미한다.
추상함수를 포함하는 클래스를 추상클래스라고 한다. abstract 키워드를 통해서 생성 할 수 있다.
fun main() {
Rabbit().eat()
}
abstract class Animal{
abstract fun eat()
fun sniff(){
println("킁킁")
}
}
class Rabbit:Animal() {
override fun eat(){
println("당근을 먹습니다.")
}
}
추상클래스는 인스턴스를 생성할 수 없다. 따라서 Rabbit 클래스를 만들어 Animal을 상속받도록 하였다.
또한 추상함수인 eat()을 override해 "당근을 먹습니다"를 출력하는 기능을 구현하여 사용하였다.
위같은 방법이 아닌 추상화의 또다른 방법이 존재한다.
인터페이스
기존 다른 언어에서는 추상함수로만 이루어진 클래스를 인터페이스라고 하였다.
하지만 코틀린에서는 속성, 추상함수, 일반함수를 모두 가질 수 있으나 생성자를 가질 수 없는 클래스를 interface라 한다.
* 추상클래스는 생성자를 가질 수 있다.
fun main() {
Dog().run()
Dog().eat()
}
interface Runner {
fun run()
}
interface Eater {
fun eat() {
println("음식을 먹습니다.")
}
}
class Dog : Runner, Eater {
override fun run() {
println("우다다다 뜁니다.")
}
override fun eat() {
println("허겁지겁 먹습니다.")
}
}
이처럼 인터페이스를 만들 수 있다. Dog 클래스에서 Runner 와 Eater 인터페이스를 상속하는데 이 때 다른 클래스 처럼 Runner() 가 아니라 이름만 적어주면 된다.
728x90
반응형
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] isNullOrBlank vs isNullOrEmpty 헷갈리지말자 (0) | 2023.08.30 |
---|---|
[Kotlin] 코틀린의 sealed class 란? (0) | 2023.08.15 |
[Kotlin 문법] 스코프함수 (0) | 2023.01.06 |
[Kotlin] 클래스와 상속 (0) | 2023.01.06 |