티스토리 뷰

Android/Kotlin

[Kotlin] 상속

DevJunku 2021. 12. 5. 21:55

출처: 테크과학! DiMo테크과학! DiMo

Kotlin 강좌 #10 - 클래스의 상속

상속을 사용하는 이유는 다음과 같다.

  1. 기존 class의 기능을 활용하여 새로운 기능을 추가하는 class 만드는 경우
  2. 여러 개의 class를 만들었는데, 공통적인 기능이 있어 이를 따로 class로 만들어 관리하려고 하는 경우

Super Class: 여기서 속성과 함수를 물려주는 쪽

Sub Class: 여기서 속성과 함수를 물려받는 쪽

Kotlin에서 상속의 조건은 2가지 있음.

  1. Sub Class는 Super Class에 존재하는 속성과 같은 이름의 속성을 갖을 수 없음
  2. Sub Class가 호출될 때는 반드시 Super Class의 생성자까지 호출되어야 함.
fun main(args: Array<String>) {

    var a = Animal("별이", 5, "개")
    var b = Dog("별이", 5)
    a.introduce()
    b.introduce()

    b.bark()

    var c = Cat("루이", 5)

    c.introduce()
    c.meow()
}

open class Animal(var name: String, var age: Int, var type: String) {
    fun introduce() {
        println("저는 ${type} ${name}이고 ${age}살 입니다.")
    }
}

class Dog(name: String, age:Int): Animal(name, age, "개") {
    fun bark() {
        println("멍멍!")
    }
}

class Cat(name:String, age:Int): Animal(name, age, "고양이") {
    fun meow() {
        println("냐옹!")
    }
}

Kotlin에서 상속하기 위해서는 open이라는 키워드를 꼭 넣어주어야 함. 이후 sub classsuper class의 속성과 같은 이름의 속성을 선언하면 안됨. 즉

var name: String, var age: Int와 같이 생성자를 선언하면 안 된다는 것임.

따라서 name: String, age: Intsuper class의 속성을 일반 파라미터로 받도록 함. 이후 상속할 super class:과 명칭을 작성하면 상속할 수 있음. 물론 super class의 속성을 미치 정한 이후에 상속할 수도 있음.

클래스의 상속을 클래스를 더 구조적으로 다룰 수 있게 해주는 장점이 있으나, 지난친 상속은 코드를 더 어렵게 만든다는 점도 조심해야 함.