프로그래밍 언어/코틀린

코트린 14. 상속

닉네임못짓는사람 2020. 12. 25. 12:29
반응형

이번 글에서는 상속에 대해서 알아보도록 하겠습니다.

상속


상속이라 함은 본래 부모가 자식에게 재산 등을 물려주는 것이라고 할 수 있습니다.

그렇다면 코틀린에서의 상속은 어떤걸까요?

 

상속은 클래스와 클래스 사이에서 만들어질 수 있는 관계로, 특정 클래스의 내용을

다른 클래스가 그대로 물려받는 것을 의미합니다.

 

예를 들어 클래스 A와 B가 있을 때, 클래스 B가 클래스 A를 상속받게 되면

클래스 B에서 클래스 A에 선언한 속성과 기능들을 사용할 수가 있게 됩니다.

 

이렇게 클래스 간의 상속관계에서 다른 클래스에 상속을 해주는 클래스를 '슈퍼클래스'또는

'부모클래스'라고 하며, 상속을 받는 클래스를 '서브클래스' 또는 '자식클래스'라고 합니다.

 

개념 자체는 이런 것인데, 바로 코드를 통해서 상속을 받아보도록 합시다.

fun main() {
    var ch1 = Child()
    ch1.wallet()
}

open class Parent(){
    var money = 10000
    
    fun wallet(){
        println("지갑에 ${this.money}원이 들어있습니다.")
    }
}

class Child():Parent(){
    
}

일단, 클래스를 상속받는 방법부터 알아봅시다.

클래스를 상속받기 위해서는 먼저 슈퍼클래스를 open class로 지정해주셔야 합니다.

 

그리고 상속받을 서브클래스를 생성하게 되는데, 서브클래스의 생성자 뒤에

슈퍼클래스의 생성자를 호출하는 구문을 추가해줍니다.

이 부분은 저번 글에서 생성자를 설명할 때, 보조생성자를 만드는 과정과 비슷하다고 할 수 있겠네요.

 

이렇게 Child클래스가 Parent클래스를 상속받게 되면 Child클래스에는 아무런 내용도 추가하지 않았지만,

Parent클래스로부터 상속받은 속성과 기능을 사용할 수 있기 때문에 Child클래스의 인스턴스로도

wallet함수를 호출할 수 있는 것입니다.

 

또한 서브클래스가 슈퍼클래스로부터 상속을 받더라도, 당연히 자신만의 속성과 기능을 추가할 수가 있습니다.

fun main() {
    var ch1 = Child()
    ch1.useMoney(1000)
    println(ch1.money)
}

open class Parent(){
    var money = 10000
    
    fun wallet(){
        println("지갑에 ${this.money}원이 들어있습니다.")
    }
}

class Child():Parent(){
    fun useMoney(money: Int){
        println("${money}원을 사용했습니다.")
        this.money -= money
    }
}

위의 사용했던 코드를 변경해서 Child클래스에 useMoney라는 새로운 기능을 추가했습니다.

여기서 this.money -= money라는 부분을 보시면, this.money는 Child객체의 속성을 의미하고

그냥 money는 useMoney함수를 호출할 때 받은 parameter를 의미합니다.

 

주의해야 할 점은, 서브클래스에서는 슈퍼클래스의 속성과 기능을 사용할 수 있지만

당연하게도 슈퍼클래스에서는 서브클래스의 속성과 기능을 사용할 수 없습니다.

 

이렇게 코틀린에서의 상속에 대해 알아보았습니다.

상속의 경우 보통 기존의 클래스가 있고, 해당 클래스에 새로운 기능을 추가해야 할 때(확장)

기존 클래스를 수정하는 것이 아니고 새로운 클래스를 생성한 뒤, 기존 클래스를 상속받아 확장하는 용도로 쓰입니다.

상속과 같은 특징들은 객체지향에서 중요한 개념이 되기 때문에 잘 알아두시길 바랍니다.

 

이번 글은 이 정도로 마치도록 하겠습니다.

감사합니다.

반응형

'프로그래밍 언어 > 코틀린' 카테고리의 다른 글

코틀린 16. 추상화  (0) 2020.12.26
코틀린 15. 오버라이딩과 오버로딩  (0) 2020.12.26
코틀린 13. 생성자  (0) 2020.12.24
코틀린 12. 클래스  (0) 2020.12.24
코틀린 11. 입출력  (0) 2020.12.23