본문 바로가기
Programming/Kotlin

[Kotlin] 코틀린 뽀개기 - 코틀린에서 상속(Inherit)을 사용해보자

by 코딩의성지 2019. 12. 1.

하이~~!!

 

오랜만에 코틀린 글을 쓴다 !!

 

오늘 배울 개념은 바로바로 !!  상속(Inherit) 이라는 개념이다. ㅎㅎ 

 

상속(Inherit)

 

프로그래밍이 아니더라도 상속이라는 말은 많이 들어봤을 것이다. 

 

코틀린에서 상속은 클래스를 만들 때 부모클래스(Super Class) 의 요소를 물려받는 것을 말한다.

 

여기서 상속하는 클래스를 부모클래스( Super Class) 라고 하고,

상속받는 클래스를 자식클래스(Sub Class)라고 한다.

 

부모클래스를 상속받은 자식클래스는 부모클래스의 변수나 메서드를 자기 것 처럼 사용할 수 있다.

 

상속의 예제코드를 한번 짜봤다. 아주 간단한 코드이다. 아래를 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
fun main(args : Array<String>) {
    var tempClass = SubClass();
    println("temp.subMmemberVar : ${tempClass.subMemberVar}");
    tempClass.subClassMethod();
 
    println("temp.superMmemberVar : ${tempClass.superMemberVar}");
    tempClass.superClassMethod();
}
 
//상속하는 클래스는 open 키워드를 써줘야한다.
open class SuperClass {
    var superMemberVar = 5;
 
    fun superClassMethod() {
        println("SuperClass method")
    }
}
 
class SubClass : SuperClass {
    var subMemberVar = 10;
 
    //부모클래스를 호출하는 생성자를 꼭 만들어줘야함
    constructor(): super()
 
    fun subClassMethod() {
        println("SubClass method")
    }
}
 

 

상속을 사용할 때 중요한게 두가지 있다. 

 

첫째는 상속하는 클래스는 open 키워드를 사용해줘야한다는 것이다. open 키워드가 없는 클래스는 코틀린에서는 final 클래스라고 인식한다. 자바에서 공부한 것처럼 final 클래스는 상속 받을 수 없다 !

 

두번째는 상속받는 클래스에서 부모클래스를 호출하는 생성자를 꼭 만들어 줘야한다는 것이다. 부모클래스를 호출하는 방법은 super() 메서드를 사용하면 된다.

 

이 두가지는 꼭 꼭 기억해주자 .

자 !! 위의 코드를 실행시켜보면 !!

 

 

이와 같은 결과를 얻을 수 있다! 백문이 불여일타 알지?? 꼭 한번 쳐보자.

 

상속을 살짝 응용해서 공부해보자. 아래의 코드를 보자

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fun main(args : Array<String>) {
    var tempClass1 = SubClass2();
    println("tempClass1.memVar : ${tempClass1.memVar1}");
 
    var tempClass2 = SubClass2(20);
    println("tempClass2.memVar : ${tempClass2.memVar1}");
 
 
}
 
open class SuperClass2 constructor(memVar1 : Int) {
    var memVar1 = memVar1;
}
 
class SubClass2 : SuperClass2 {
    constructor(): super(10)
    constructor(memVar1: Int): super(memVar1)
}
 
 

 

코드를 보면 상속받는 자식클래스에서 생성자가 두개인걸 볼 수 있다.

하나는 파라미터가 없는 생성자를 만들었고, 하나는 파라미터가 있는 생성자를 만들었다.

 

파라미터가 없는 생성자를 이용해서 객체를 만들면 super 메서드에 채워 넣은 10이 memVar1 에 할당 될 것이고,

파라미터가 있는 생성자를 이용해서 객체를 만들면 넣어준 파라미터의 값이 memVar1 에 할당 될 것이다.

 

즉 tempClass1 의 memVar1 은 10 이, tempClass2 의 memVar1 은 20이 들어가 있을 것이다. 실행을 해보면 아래와 같다.

 

자...! 이정도면 상속이 이해됐을까 모르겠다.. ㅎㅎㅎ 그래도 차분하게 공부해보면 쉬울 거다.

그럼 오늘도 즐거운 코딩하도록하자 !! 안녕~~!

반응형

댓글