
상속, 포함등 Kotlin의 클래스 관계에 대해 설명할 것이다.
Kotlin에서는 모든 클래스가 최종이므로 그냥 클래스를 확장할 수 없다. 따라서 클래스 간의 관계를 클래스에 정의해 줘야 확장할 수 있다.
슈퍼클래스(부모클래스) 만들기
클래스에 open을 붙여 확장가능성을 부여할 수 있다.
open class ClassName(val name1: String, val name2: String) {
...
}
서브클래스(자식클래스) 만들기
다음과 같이 서브클래스를 만들 수 있다.
class subclassName ([선택]매개변수) : superclassName ([선택]매개변수) {
...
}
클래스 간의 관계
상속관계
상위클래스가 일반적인 개념 클래스이고 하위클래스가 구체적인 개념클래스인 경우이다.
단순하게 코드를 재사용 하고자 사용하지는 않는다.
휴대기기 - 핸드폰, 이어폰...
// 스마트폰은 휴대기기이다.
class SmartPhone : MobileDevice() {
}
포함관계

한 클래스가 다른 클래스를 소유한 관계로 코드 재사용의 한 방법이다.
예제
class SalesReport(
val salesCar: SalesCar,
val salesVessel: SalesVessel
) {
fun carWheelOptino() {
salesCar.wheelOption()
}
fun vesselCapacity() {
salesVessel.capacity()
}
//위와 같이 부모클래스가 소유하고 있는 클래스의 모든 메서드 조정이 가능하다.
fun saleAll() {
salesCar.sale()
salesVessel.sale()
}
//이 메서드와 같이 여러 함수를 한꺼번에 조정할 때도 유용하다.
}
class SalesCar(name: String, sales: double) {
...
fun wheelOption() {
...
}
fun sale() {
...
}
}
class SalesVessel(name: String, sales: double) {
...
fun capacity() {
...
}
fun sale() {
...
}
}
메서드 재정의
모든 클래스에서 구현해야하는 메서드이지만 개별적으로 다른 기능을 실행해야 한다면 메서드를 재정의 하면 된다.
메서드 재정의를 하면 슈퍼클래스에 정의된 메서드의 실행을 중단하고 서브클래스에 재정의된 메서드를 실행한다.
여러 서브 클래스들의 메서드를 슈퍼 클래스 타입 하나로 각각 실행시킬수 있어 편하다.
방법
1. 슈퍼클래스에서 재정의 하고자 하는 메서드의 fun 키워드 앞에 open 키워드를 추가한다.
open class SuperClass {
...
open fun methodName() {
...
}
}
2. 서브클래스에서 슈퍼클래스의 메서드를 생성하고 fun 키워드 앞에 override 키워드를 추가한다.
class SubClass : SuperClass() {
...
override fun methodName() {
...
}
}
3. 상속한 서브클래스들을 슈퍼클래스타입의 객체에 대입하여 사용한다.
fun main() {
val name: SuperClass = SubClass()
name.methodName()
}
예제
open class SuperClass() {
...
open fun method() {
...
}
}
class SubClass1: SuperClass() {
...
override fun method() {
println("SuperClass1 메서드")
}
}
class SubClass2: SuperClass() {
...
override fun method() {
println("SuperClass2 메서드")
}
}
fun main() {
val name1: SuperClass = SubClass1()
name1.method()
val name2: SuperClass = SubClass2()
name2.method()
}
출력 : "SuperClass1 메서드"
"SuperClass2 메서드"
만약 서브클래스들의 공통의 부분이 있다면 super 키워드를 사용해 슈퍼클래스의 코드를 재활용 할 수 있다.
open class SuperClass {
...
open fun methodName() {
...
}
}
class SubClass : SuperClass() {
...
override fun methodName() {
super.methodName() //공통부분
println("...") //개별부분
...
}
}
변수 재정의
메서드 재정의와 마찬가지로 open과 override 키워드를 사용하여 재정의 한다.
open class SuperClass {
open val name = "unknown"
...
}
class SubClass : SuperClass() {
override val name = "sub1"
...
}
참고자료
developer.android.com/codelabs
'언어 > Kotlin' 카테고리의 다른 글
| [Kotlin] 속성 위임 정의 (0) | 2023.03.17 |
|---|---|
| [Kotlin] 공개 상태 (0) | 2023.03.10 |
| [Kotlin] 클래스 생성 , 생성자 (0) | 2023.02.28 |
| [kotlin] null 처리 (0) | 2023.02.24 |
| [Kotlin] 반복문 (0) | 2023.02.21 |