1. 상속이란?
객체지향 프로그래밍에서 상속은 굉장히 중요한 개념 중 하나이다. '상속'을 통해 반복되는 코드의 양을 줄일수도 있고, 다른 클래스가 가지고 있는 기능(속성, 함수 등)들을 상속받아 그대로 사용할 수 있기 때문이다. 상속하는 쪽을 Super Class, (엄마클래스, 아빠클래스라 부르기도 한다고 한다) 상속받는 쪽을 Sub Class (자식클래스라고도 부름) 라 한다.
왼쪽 그림을 보자. Super Class 에는 var1,var2 이렇게 두개의 변수와 methodeA,methodeB 두개의 메서드를 가기고 있는 반면, Super Class 를 상속받은 Sub Class 는 Super Class 가 가지고 있던, 기존의 두 변수와 두 메서드 뿐만이 아니라, 새로운 속성과 메서드를 가지고 있는 걸 볼 수 있다. 이미 존재하는 클래스를 확장한 것이다.
2. 기본 코드 틀
코틀린에선 상속을 허용하기 위해서 open 한정자를 사용한다.
서브 클래스는 ' : ' 를 사용해 슈퍼클래스를 상속한다.
사진에 보이듯, subclass의 객체는 subclass 내 속성과 메서드 뿐만이 아니라, superclass의 속성과 메서드 참조도 가능하다.
3. 클래스 계층(계급)
클래스 계층 구조는 단 하나의 층만이 아닌, 여러 층으로 확장할 수 있다. 클래스 계층 구조는 위로갈수록 일반화하고 아래쪽으로 갈수록 전문화한다고 생각하면 된다. 아래 그림 예시를 보자. 가장 상위의 클래스는 탈것이고 밑으로 계층이 내려갈수록 더 세분화되있음을 볼 수 있다. 여기서 중요한건, 상위클래스와 하위클래스가 " ~ 이다 관계 (is-relationship) " 로 묶여있다는 것이다. 밑에 예시로 얘기하자면, 지상탈것은 탈것이다. 차와 자전거는 지상탈것이다. 버스, 트럭과 승용차는 차다. 카누와 보트는 수상 탈것이다. 라는게 성립된다는 얘기다.
이는 바로 위아래 관계로만 성립되는게 아니다. 버스는 차다 에서만 끝나는게 아니라 버스는 지상 탈것이다. 버스는 탈것이다. 즉 최상위클래스까지도 Is 관계가 성립되는 것이다.
4. 간단한 예시
open class Animal(val name : String, var age : Int, val type : String){
fun information(){
println("----정보---")
println("이름 : $name")
println("나이 : $age")
println("종류 : $type")
}
open fun crying() : Unit {}
}
class Dog (name:String, age:Int) : Animal(name, age, "개") {
override fun crying() {
println("월!월월!")
}
}
class Cat (name:String, age:Int) : Animal(name, age, "고양이") {
override fun crying() {
println("미야옹~")
}
}
fun main(){
val maltese = Dog("미미",3)
val russianBlue = Cat("잭슨",12)
maltese.information()
maltese.crying()
russianBlue.information()
russianBlue.crying()
}
결과
출처:
내용 / 도움준 곳: 학교 교수님 (Christian Kohls) 강의
'언어 > Kotlin' 카테고리의 다른 글
Kotlin : Polymorphie (ft.오버라이딩) (0) | 2022.10.30 |
---|---|
Kotlin : 상속 (inheritance) 적용해보기 (0) | 2022.10.28 |
Kotlin : Movie Maker produce() 함수 (0) | 2022.10.19 |
Kotlin : Movie Maker 일단 클래스부터 (0) | 2022.10.19 |
Kotlin : Movie Maker 시물레이션, 구상 (0) | 2022.10.18 |