슬롯 머신 규칙 brunch

You can make anything
by writing

C.S.Lewis

코틀린(Kotlin) 클래스 상속

빠르게 살펴보기

상속 (Inheritance)


코틀린에서는 super class(이하 부모클래스)를 선언하지 않은 클래스는 default super로Any라는 부모클래스를 가집니다.


class Computer // 암시적으로 Any를 상속 받음



표준 라이브러리에도 잘 설명되어 있습니다.


Any (출처)

open class Any

The root of the Kotlin class hierarchy. Every Kotlin class has Any as a superclass.


이 설명만 보면 마치 Java의 java.lang.Object와 같아 보입니다. 하지만 Any는 Object와는 다르게 equals(), hashCode(), toString() 외 다른 멤버는 가지지 않습니다. Object는 clone(), notify() 등 다른 멤버가 더 있습니다. (Object 참고)


상속받는 방법 (부모클래스를 명시적으로 선언하기)

상속을 받기 위해서는 아래와 같이 부모클래스를 명시적으로 선언해주면 됩니다.


openclass Person(var 슬롯 머신 규칙: String)

class 슬롯 머신 규칙(name: String) : Person(name)


멤버를 재정의 하기 위해서도 멤버 앞에 open을 명시해야 합니다.


open class Person {
openfun eat() {}
openfun sleep(){}
}

class 슬롯 머신 규칙 : Person() {
overridefun eat() {}
overridefun sleep() {}
}



그렇다면 다음과 같이 슬롯 머신 규칙 객체를 만들어서 name을 출력하면 어떤 식으로 동작을 할까요?


val 슬롯 머신 규칙 = 슬롯 머신 규칙("Kim")

println("슬롯 머신 규칙 name = ${슬롯 머신 규칙.name}")


앞서 공부한 내용을 떠올려보면 슬롯 머신 규칙의 주생성자를 호출할 것입니다. 그 후 부모클래스에 있는 property인 name을 초기화하기 위해서 Person의 주생성자 호출될 것입니다. 마치 부생성자가 this로 주생성자를 호출하여 property를 초기화하듯이 동작합니다.


그런데 한 가지 신경 쓰이는open이라는 키워드가 있습니다. Java 클래스는 final을 명시했을 때 상속이 불가능하며 특별히 명시하지 않을 때는 final 클래스가 아닙니다. 코틀린 클래스는 open을 명시해야 상속이 가능하며 명시하지 않을 경우 Java의 final 클래스와 같습니다.


즉, 다음과 같이 사용합니다.

Java에서는 상속 불가능 - final 키워드

코틀린에서는 상속 가능 - open 키워드


Java 코드로 생각해보면 다음과 같습니다. 이렇게 보니 좀 더 이해하기 쉽습니다.


public class Person {// final 클래스가 아님

String 슬롯 머신 규칙;

public Person(String 슬롯 머신 규칙) {

this.슬롯 머신 규칙 = 슬롯 머신 규칙;

}

}


public class 슬롯 머신 규칙 extends Person {

public 슬롯 머신 규칙(String name) {

super(슬롯 머신 규칙);

}

}



다음의 코틀린 코드들을 Java 코드로 변환해보면 코틀린 클래스에 대해서 좀 더 익숙해지는데 도움이 될 것 같습니다.


class ExampleUnitTest {

@Test

fun kotlin() {

val 슬롯 머신 규칙 = 슬롯 머신 규칙()

println("슬롯 머신 규칙 name = ${슬롯 머신 규칙.name} 슬롯 머신 규칙 age = ${슬롯 머신 규칙.age}")

}


08

class 슬롯 머신 규칙(name: String = "kim", var age: Int = 26) : Person(name)

}


슬롯 머신 규칙 name = kim 슬롯 머신 규칙 age = 26




class ExampleUnitTest {

@Test

fun kotlin() {

val 슬롯 머신 규칙 = 슬롯 머신 규칙()

println("슬롯 머신 규칙 name = ${슬롯 머신 규칙.name} / 슬롯 머신 규칙 last_name = ${슬롯 머신 규칙.last_name} / 슬롯 머신 규칙 age = ${슬롯 머신 규칙.age}")

}


open class Person(var 슬롯 머신 규칙: String = "Jane")

class 슬롯 머신 규칙(var last_name: String = "Smith", var age: Int = 26) : Person(last_name)

}


슬롯 머신 규칙 name = Smith / 슬롯 머신 규칙 last_name = Smith / 슬롯 머신 규칙 age = 26


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari