[Kotlin] 10. 클래스의 상속

상속은 왜 필요할까?

1. 이미 존재하는 클래스를 확장

2. 여러개의 클래스들의 공통점을 뽑아 코드관리를 편하게

두 관점에서 코틀린의 상속에 대해서 알아보자.

1. 상속(inheritance)

  • 상속하는 쪽은 수퍼클래스, 상속 받는 쪽을 서브클래스라고 한다.
  • 코틀린은 상속 금지가 기본 형태이다.
  • open 상태가 상속 가능 상태로 클래스 선언시 붙일 수 있는 키워드이다.
    • 수퍼 클래스 쪽에 붙인다.

1-1. 상속 규칙

  1. 서브 클래스는 수퍼 클래스에 존재하는 속성과 같은 이름의 속성을 가질 수 없다.
  2. 서브 클래스 생성자 호출 시 반드시 수퍼클래스 생성자가 먼저 호출된다.
  3. 서브 클래스는 파라미터를 받을 때 var, val을 붙이지말고 일반 파라미터로 받는다.
    • var, val을 붙이면 속성으로 선언된다.
  4. 일반 파라미터로 받은 값들을 수퍼 클래스 생성자에 직접 넘겨준다.
  5. 서브 클래스() : 수퍼 클래스() 방식으로 상속받는다. (수퍼 클래스의 생성자를 호출한다.)

예시.

Animal 클래스를 상속받은 서브 클래스(Dog, Cat)을 선언하고 각 클래스만의 함수를 선언해주자.

fun main() {
    var a = Animal("별이", 5, "개")
    var b = Dog("별이", 5)
    var c = Cat("루어", 1)
    
    a.introduce()
    b.introduce()
    
    b.bark()
    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, "개"){ // var, val을 쓰지않고 Animal 클래스 생성자에 직접 넘겨준다.
	fun bark(){ // Dog만 가능하다.
        println("멍멍")
    }
}

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

클래스의 상속은 구조적으로 만들지만 지나친 상속 구조는 코드를 더욱 어렵게 만든다.

좋은 웹페이지 즐겨찾기