코틀린

코틀린 3편 (클래스 생성자와 상속)

태인킴 2020. 11. 10. 23:44
반응형

 


1. 클래스 파일명

코틀린자바다르게 파일명클래스 이름달라도 컴파일이 됩니다.

 

 

2. 클래스 생성과 멤버 변수, 메서드

fun main() {
    val person = Person()
    println("name is ${person.name}")

    val person2 = Person2()
    person2.eatNoddle()
}

// 멤버 변수
class Person {
    val name = "taein"
}

// 메서드
class Person2 {
    fun eatNoddle() {
        println("Yummy~~")
    }
}

출력 결과

코틀린은 자바와 다르게, 객체 생성을 위해서 'new' 키워드를 사용하지 않습니다. 멤버 변수, 메서드는 위와 같이 사용 합니다.

 

 

2. 클래스의 생성자

class Person4(val name: String){}

class Person5 constructor(val name: String){}

class Person6 constructor(val name: String = "default value"){}

class Person7 constructor(val name: String = "default value"){
    init {
        println("default name is ${name}")
    }
}

Person4 : constructor 키워드 없이도 생략하여 정의 할수 있습니다. 

Person5 : constructor 키워드를 사용하여 정의 할 수 있습니다.

Person6 : 파라미터 정의 안에서 default 값을 정의해 줄 수 있습니다.

Person7 : init{} 블록을 이용해서, 생성시 초기화 로직을 정의 할 수 있습니다.

 

 

5. 주생성자, 부생성자

// java
class Person {
    Person(String name) {}

    Person(String name, int age) {}
}
// kotlin
class Person8 constructor(val name: String = "default"){
    // 주 생성자
    init {
        println("${name} init is called!!")
    }

    // 부 생성자
    constructor(name : String, age : Int) : this(name) {
        println("my name is ${name}, ${age} years old")
    }
}

주생성자(Primary Constructor) 라고 불리는 init {} 블럭을 사용해서, name 파라미터를 가지는 생성자를 호출 할 수 있습니다. 부 생성자 라고 불리는 constructor(name : String, age : Int) 블럭을 사용해서 name, age를 파라미터를 가지는 생성자를 호출 할 수 있습니다. 이때, this(name)주생성자를 의미 합니다.

 

 

6. 상속 / open 키워드

open class Person9 constructor(val name: String = "default"){
    init {
        println(name)
    }
}

class Korean : Person9() {}

위 코드는 Korean은 자식 클래스이고, Person9는 부모 클래스 입니다. 위와 같이 상속 할수 있습니다. 하지만, 코틀린의 모든 클래스는 final class 입니다. 따라서 open 이라는 키워드를 사용하여, 상속을 허락 시킬수 있습니다. 또한, java와 같이 다중 상속을 지원 하지 않습니다.

 

 

7. 메서드 오버라이딩

fun main() {
    var korean = Korean2()
    korean.singASong()
}

open class Person10 constructor(val name: String = "default"){
    open fun singASong() {
        println("lalala")
    }
}

class Korean2 : Person10() {
    override fun singASong() {
        super.singASong()
        println("라라라")
    }
}

출력 결과

상속 받은 메서드를 'override' 키워드와 함께 사용 할 수 있습니다. 또한 메서드 역시 상속을 시켜주기 위해서는 open 키워드를 사용합니다. 그리고 super 키워드를 통해서, 부모 클래스의 접근 할 수 있습니다.

반응형

'코틀린' 카테고리의 다른 글

코틀린 6편 (lateinit)  (0) 2020.11.13
코틀린 5편 (data class, object, companion object)  (0) 2020.11.11
코틀린 4편 (람다 Lamda)  (0) 2020.11.11
코틀린 2편  (0) 2020.11.10
코틀린 1편  (0) 2020.09.16