https://kotlinlang.org/docs/classes.html
class
키워드로 선언할 수 있다.class Person { /*...*/ }
class Empty
class Person(firstName: String)
init
block을 사용하면 객체 생성 동안 일부 코드를 실행시킬 수 있다.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}")
}
}
init
block에서 사용할 수 있다.
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
) { /*...*/ }
constructor
키워드는 필수이다.class Customer public @Inject constructor(name: String) { /*...*/ }
constructor
키워드가 필수인 부 생성자를 선언할 수도 있다.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)
}
}
init
block 코드는 사실상 주 생성자의 일부가 된다.
init
block과 프로퍼티 초기화는 부 생성자 바디보다 먼저 실행 된다.init
block은 호출된다.class Constructors {
init {
println("Init block") // 먼저 실행
}
constructor(i: Int) {
println("Constructor $i") // init block 후에 실행
}
}
public
기본 생성자가 생성된다.
constructor
키워드를 사용해라class DontCreateMe private constructor() { /*...*/ }
JVM에선 모든 주 생성자의 매개변수에 기본값이 설정되어 있으면 컴파일러는 매개 변수 없는 기본 생성자를 추가로 생성한다.
class Customer(val customerName: String = "")