코틀린에서 주 생성자를 작성하는 방법은 2가지 정도가 존재한다.
// 첫번째 방법
class Person(val name: String, val age: Int) {}
// 두번째 방법
// constructor 키워드를 붙이고 내부에 init 블럭 내에서 생성자 선언
// init 블록의 내용은 주생성자가 실행된 직후 실행된다.
class Person constructor(name: String) {
val testName: String
init {
testName = name
}
}
주생성자를 숨겨 클래스 이외의 곳에서 인스턴스화 할 수 없게 만드려면 다음과 같이 선언한다.
// 주생성자에 private 설정
class Hidden private constructor {
fun showMe() = println("HaHa")
}
fun main() {
val hidden = Hidden() // compile error
}
// 주생성자가 존재할 때 constructor 를 사용해 부생성자 선언이 가능
// 주생성자가 존재하는 경우 부생성자는 반드시 주생성자를 상속해야한다.
class Person(val name: String, val age: Int) {
constructor(onlyName: String): this(onlyName, 0)
constructor(): this("", 0)
}
// 주생성자가 존재하지 않는 경우 블록을 열어 생성자를 정의해주면 된다.
class Car {
val name: String
constructor(carName: String) {
this.name = carName
}
constructor() {
this.name = "UNKNOWN"
}
}