- 클래스 상속(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 |