Kotlin

Kotlin - super와 this

J_Bin 2022. 6. 14. 11:49

# this로 현재 객체 참조하기

package chap02.section1

/* this로 현재 객체 참조하기 */
/* 여러개의 부 생성자 참조하기 */

open class Person{
    constructor(firstName : String){
        println("[Person] firstName : $firstName")
    }
    constructor(firstName: String, age : Int){      // 3
        println("[Person] firstName : $firstName, $age")
    }
}

class Developer:Person{
    constructor(firstName: String):this(firstName,10){      // 1
        println("[Developer] $firstName")
    }

    constructor(firstName: String, age : Int):super(firstName,age){     // 2
        println("[Developer] $firstName,$age")
    }
}



fun main(){

    val sean = Developer("Sean")


}

// main 함수에서 Developer("Sean")을 통해 객체를 생성
// 이 때 인자가 1개이므로 먼저 Developer class의 1번 생성자로 진입
// 하지만 코드를 실행하기 앞에 this()에 의해 firstName과 10을 인자로 가지고 Developer 클래스의 다른 생성자를 호출
// 이 this()는 2개의 인자를 가지는 부 생성자인 2번을 가리킨다.
// 여기에 다시 super()가 사용되었는데 super는 상속하고 있는 상위 클래스를 가리키기 때문에 2개의 인자를 처리할 수 있는 Person 클래스의 3번 부 생성자를 호출하낟.
// 코드를 실행하면 3 -> 2 -> 1 순서대로 코드가 실행된다.

 

# 주 생성자와 부 생성자 함께 사용하기

package chap02.section1

/* 주 생성자와 부 생성자 함께 사용하기 */

// out이라는 인자에 println()을 기본값으로 할당해 인자에 접근할 때 출력되도록 설정
// 2번 주 생성자
class Person(firstName : String, out : Unit = println("[Primary Constructor] Parameter")){
    val fName = println("[Property] Person fName : $firstName")     // 3 프로퍼티 할당
    init {                                                          // 4 초기화 블록
        println("[init] Person init block")
    }

    // 1번 부 생성자
    // out이라는 인자에 println()을 기본값으로 할당해 인자에 접근할 때 출력되도록 설정
    constructor(firstName: String, age : Int, out : Unit = println("[Secondary Constrictor] Parameter")) : this(firstName){
        println("[Secondary Constructor] Body : $firstName, $age")          // 부 생성자 본문
    }



}


fun main(){
    val p1 = Person("jkb",30)           // 1 -> 2 호출, 3 -> 4 -> 5 실행
    println()
    val p2 = Person("Dooly")                // 2 호출, 3 -> 4 실행
}

 

'Kotlin' 카테고리의 다른 글

Kotlin - 가시성 지시자  (0) 2022.06.14
Kotlin - 인터페이스  (0) 2022.06.14
Kotlin - 상속과 다형성  (0) 2022.06.14
Kotlin - 클래스 , 생성자  (0) 2022.06.14
Kotlin - Try~Catch  (0) 2022.06.14