TIL

Classes (constructor)

https://kotlinlang.org/docs/classes.html

class Person { /*...*/ }
class Empty

Constructors

class Person(firstName: String)
class InitOrderDemo(name: String) {
    val firstProperty = "First property: $name".also(::println)
    
    init {
        println("First initializer block that prints $name")
    }
    
    val secondProperty = "Second property: ${name.length}".also(::println)
    
    init {
        println("Second initializer block that prints ${name.length}")
    }
}
class Customer(name: String) {
    val customerKey = name.uppercase()
}
class Person(val firstName: String, val lastName: String, var isEmployed: Boolean = true)
class Person(
    val firstName: String,
    val lastName: String,
    var age: Int, // trailing comma
) { /*...*/ }
class Customer public @Inject constructor(name: String) { /*...*/ }

Secondary constructors

class Person(val pets: MutableList<Pet> = mutableListOf())

class Pet {
    constructor(owner: Person) {
        owner.pets.add(this) // adds this pet to the list of its owner's pets
    }
}
class Person(val name: String) {
    val children: MutableList<Person> = mutableListOf()
    
    constructor(name: String, parent: Person) : this(name) {
        parent.children.add(this)
    }
}
class Constructors {
    init {
        println("Init block") // 먼저 실행
    }

    constructor(i: Int) {
        println("Constructor $i") // init block 후에 실행
    }
}
class DontCreateMe private constructor() { /*...*/ }

JVM에선 모든 주 생성자의 매개변수에 기본값이 설정되어 있으면 컴파일러는 매개 변수 없는 기본 생성자를 추가로 생성한다.

class Customer(val customerName: String = "")