[Kotlin] class 초기화 순서

panax·2023년 12월 20일
0

Kotlin

목록 보기
4/5
post-thumbnail

🍿초기화 순서

코틀린에서 클래스를 초기화 할 때 실행되는 순서를 정리하려 한다.

🍿init

init은 클래스를 생성하면 먼저 실행되는 것들 중 하나다.
변수 설정도 같은 종류인데 가장 위에 있는 코드부터 실행된다.

fun main() {
    // First value : test
	// First init test
	// Second value : test
	// Second init test
    Person("test")
}

class Person(name: String) {
    val firstValue = "First value : $name".also(::println)
    
    init {
        println("First init $name")
    }
    val secondValue = "Second value : $name".also(::println)

    init {
        println("Second init $name")
    }
}

🍿부 생성자

부 생성자로 클래스를 생성하면 변수 초기화와 init이 먼저 호출되고 그 다음에 호출된다.

fun main() {
	// Value : test
	// Init test
	// Constructor 10
    Person(10)
}

class Person(name: String) {
    val firstValue = "Value : $name".also(::println)

    constructor(age: Int): this("test") {
        println("Constructor $age")
    }
    
    init {
        println("Init $name")
    }
}

🍿상속

부모 클래스가 존재하면 부모 클래스의 코드가 먼저 실행된다.

fun main() {
	// Init parent test
	// Size parent 4
	// Init child test
	// Size child 4
    Person("test")
}

open class Creature(val name: String) {
    init {
        println("Init parent $name")
    }

    open val size: Int = name.length.also { println("Size parent $it") }
}

class Person(
    name: String
) : Creature(name) {

    init { println("Init child $name") }

    override val size: Int = super.name.length.also { println("Size child $it") }
}
profile
안드로이드 개발자

0개의 댓글