본문 바로가기
Android/안드로이드 스터디(Kotlin)

Kotlin] 16. 상속

by 김마리님 2020. 12. 9.

자바는 기본 클래스 선언이 default 이다. 그러나 코틀린은 기본적으로 final이다. 그렇기 때문에 기본적으로 상속이 허용되지 않는다. 그러나 상속을 할 수 있는 방법이 있다. 상속받을 모체 클래스에 open 키워드를 붙이면 된다.

 

fun main(args: Array<String>): Unit {

    val person = Person("홍길동", 32)
    val student = Student("김미영", 26, 20201209)
}

open class Person(var name: String, var age: Int)

class Student(name: String, age: Int, var id: Int) : Person(name, age) 

 

Student 옆에 : Person으로 마치 함수나 변수 타입을 선언하듯 붙어있는데,

이렇게 붙여두면, 서브 클래스 : 슈퍼클래스로

서브 클래스가 슈퍼 클래스를 상속한다는 의미이다. 즉, 이 코드는 Student 클래스는 Person 클래스를 상속한다고 선언하는 코드이다.

 


 

자바할때 object라는 객체는 모든 자료형 타입을 다 커버할 수 있는 형태이다. 그래서.. 자료형을 모를땐 object 객체로 받아, 해당 자료형으로 다운캐스팅을 하는 경우가 많다. 그 object라는 객체는 코틀린도 가진다. 

이 object로 일회용 상속이 가능하다. 클래스에 상속을 한 것이 아니라 객체로 상속을 한 것이기 때문이다.

 

fun main(args: Array<String>): Unit {
    val custom : Person = object : Person("Kotlin", 3){
        override fun print() {
            println("오버라이딩")
        }
    }

    custom.print()
}

open class Person(val name: String, val age: Int) {
    open fun print(){
        println("이름 : $name")
        println("나이 : $age")
    }
}

 

객체에 object 자료형을 선언하고 : 슈퍼클래스 를 붙여 클래스를 객체에 상속시킨다. 따라서, 오버라이딩 된 함수가 작동된다.

 

결과 :

오버라이딩

 

 


 

자바를 학습해본 사람이라면 모든 객체 자료형이 object를 상속한다는 것을 알고 있을 것이다. 마찬가지로, 코틀린의 모든 클래스는 Any 라는 클래스를 상속한다.

 

Any 클래스는 세 가지 멤버함수를 가지고 있다

open class Any {
	open operator fun equal(other : Any?) : Boolean
    open fun hashCode() : Int
    open fun toString() : String
}

 

첫 함수는 = 연산자를 오버로딩 한다.

두 번째 함수는 객체의 해시코드를 반환하고,

세 번째 함수는 객체를 String 타입으로 반환한다.

 

예시를 보자.

 

fun main(args: Array<String>): Unit {
    val building = Building("코틀린 건물", 101)
    printObject(building)
}

fun printObject(any: Any) {
    println(any.toString())
}


class Building(val name: String = "", val number: Int = 0) {
    override fun toString() =
        "이름 : $name \n호수 : $number 호"

}

 

open class가 따로 없어도 toString이 오버라이딩 키워드가 붙는 것을 알 수 있다. 

코드는 Any.toString을 호출하는데, 오버라이딩이 되어 실질상으론 Building 속의 toString이 호출된다.

 

결과 :

 

이름 : 코틀린 건물 
호수 : 101 호

 

 

반응형

'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글

Kotlin] 18. Nothing  (0) 2020.12.09
Kotlin] 17. 오버라이딩  (0) 2020.12.09
Kotlin] 15. 멤버함수의 중위 표기법(infix)  (0) 2020.12.08
Kotlin] 14. in  (0) 2020.12.07
Kotlin] 13. invoke?  (0) 2020.12.07