코틀린 강좌 #9 클래스의 상속

Kotlin/기본 문법 · 2020. 12. 17. 13:26

테크과학! DiMo

 

테크과학! DiMo

개발자가 얘기하는 생활 속 IT기술에 대한 과학! 여러분이 몰랐던, 혹은 정확히 알지 못했던 IT 테크놀러지를 파드립니다! 좋은 영상을 위한 채널 후원, 투네이션을 통해서 해주세요! 후원링크 htt

www.youtube.com

 

 

개발 환경: play.kotlinlang.org


상속이 필요한 경우

 

1. 이미 존재하는 클래스를 확장하여 새로운 속성이나 함수를 추가한 클래스를 만들어야 할 때


2. 여러 개의 클래스를 만들었는데 클래스들의 공통점을 뽑아 코드 관리를 편하게 해야 할 때

 

수퍼 클래스와 서브 클래스


속성과 함수를 물려주는 클래스를 수퍼 클래스

물려 받는 쪽을 서브 클래스

 

 

 

코틀린에서 상속의 특징.


- 상속 금지가 기본 값 (= 'open' 상태가 아니다)


   open은 클래스가 상속될 수 있도록 클래스 선언시 붙여줄 수 있는 키워드.

 

 

상속의 두가지 규칙


1. 서브 클래스는 수퍼 클래스에 존재하는 속성과 '같은 이름'의 속성을 가질 수 없음

 


2. 서브 클래스가 생성될 때는 반드시 수퍼 클래스의 생성자까지 호출해야 함

 

 

 

 

클래스 상속은 클래스를 더 구조적으로 다룰 수 있게 해준다는 장점이 있지만, 지나친 상속 구조는 코드를

 

더 어렵게 만든다.

 

 

코드 예시

fun main() {
   var dog = Animal("별",1,"개")
   var dog2 = Dog("별",2)
   
   dog.introduce()
   dog2.introduce()
   dog2.bark()
   
   var cat = Cat("라옹", 1)
   cat.introduce()
   cat.meow()

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

// var, val 등을 붙이면 속성으로 선언되므로 var, val을 붙이지 않는 것이다.(규칙 2번)
// 콜론을 붙이고 수퍼클래스의 생성자를 호출할 수 있도록 한다.
class Dog (name:String, age:Int) : Animal(name, age, "개") // 중괄호 생략해도 선언은 가능하다.
{
    fun bark() {
        println("멍멍")
    }
}

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

출력:
저는 개 별이고, 1살 입니다.
저는 개 별이고, 2살 입니다.
멍멍
저는 고양이 라옹이고, 1살 입니다.
야옹