연습장/이론

클래스 3. 클래스 상속

아이른 2024. 2. 15. 18:09

- 클래스 상속(inheritance)이 필요한 경우.
: 1. 이미 만들어진 클래스를 확장하여 새로운 속성이나 함수를 추가한 클래스를 만들어야 할 때.

기존 클래스 A 새로운 클래스 A B
 새로운 클래스 A C 


: 2. 여러개의 클래스를 만들었을 때 클래스의 공통점을 뽑아 코드 관리를 편안하게 하기 위해.  

기존 클래스 A B 새로운 클래스 A 
기존 클래스 A C


- 수퍼 클래스(속성과 함수를 물려주는 쪽) + 서브 클래스(물려받는 쪽)  
: 수퍼클래스 A → 서브 클래스 A B 


- open 사용.

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

: 코틀린은 상속 금지가 기본이기 때문에(open 상태가 아님) 상속을 받을 수 없음.

fun main(){ ⑦
    var a = Animal("별이",5,"개")
    var b = Dog("별이",5)

    a.introduce()
    b.introduce()
}
   
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, "개") ⑥
① name, age, type 기본 정보 속성 입력.
② 동물의 정보를 담은 함수 introduce.
③ Animal 클래스를 상속받아 Dog로 클래스를 확장하기 class Animal 앞에 open 붙여줌.
④ 상속 받을 Dog 클래스에 만든 name, age 파라미터는 Animal 클래스에 직접 넘겨주어야 함. (자체 속성을 만들어주는 var,val는 작성하지 않음.)
⑤ 클래스 선언 뒤 콜론을 붙이고 수퍼 클래스의 생성자를 호출할 수 있도록 해줌.
⑥ 생성자의 파라미터로 받은 name, age, "개" 라는 type은 Dog 클래스라면 공통 된 값이므로 고정되어 넘김.
⑦ name, age, "개" 넣어 생성한 a인스턴스와 Dog 클래스에 name, age만 넣어 생성한 b인스턴스가 같은 속성의 함수의 기능을 가짐을 볼 수 있음.
<print>
개 별이이고, 4살 입니다
개 별이이고, 4살 입니다


- 상속에 대한 두 가지 규칙.
1. 서브 클래스는 수퍼 클래스에 존재하는 속성과 '같은 이름'의 속성을 가질 수 없음.
2. 서브 클래스가 생성될 때는 반드시 수퍼 클래스의 생성자까지 호출되어야 함. 


fun main(){
    var a = Animal("별이",5,"개")
    var b = Dog("별이",5)
    a.introduce()
    b.introduce()
    b.bark() //2. bark를 시켜보면 "멍멍"이 호출.
 
    var c = Cat("루이",1) //4. introduce와 meow를 호출 가능.
    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("멍멍")
    }
}//1. 이 함수는 Dog클래스에서만 사용할 수 있기 때문에 b 인스터스에만 적용 됨.

class Cat (name:String, age:Int): Animal(name, age, "고양이"){
    fun meow(){
        println("야옹")
    }
} //3. Cat클래스의 name, age, "고양이"라는 값을 수퍼클래스에 넘겨줌.

 

<print>
개 별이이고, 4살 입니다
개 별이이고, 4살 입니다
멍멍
고양이 루이이고, 1살 입니다
야옹


: 클래스의 상속을 클래스를 더 구조적으로 다룰 수 있게 해준다는 장점이 있지만 지나친 상속구조는 코드를 더 어렵게 만든다는 점도 있음.

'연습장 > 이론' 카테고리의 다른 글

클래스 5. 클래스 설계  (1) 2024.02.19
클래스 4. 오버라이드, 추상화, 인터페이스  (1) 2024.02.16
Kotlin_ 3-1. 반복문  (0) 2024.02.15
Kotlin_ 2-1. 배열, 조건문  (0) 2024.02.14
Kotlin 연산자 이론  (0) 2024.02.07