코틀린에선 클래스를 선언하는 동시에 주생성자를 만든다. 주 생성자는 생성자 파라미터를 지정하고 그 생성자 파라미터에 의해 초기화되는 프로퍼티를 정의하는 두 가지 목적으로 쓰인다.
(주 생성자에 넣는 파라미터는 자동으로 필드에 추가된다.)
class User constructor(val username: String)
class User(val username: String)
class User private constructor(val username: String)
접근 제어자를 설정하는 경우엔 constructor
키워드를 삭제할 수 없다.
부 생성자는 클래스 블록 내에 존재하는 생성자이다. 주 생성자에서는 constructor 키워드를 생략할 수 있었지만, 부 생성자는 constructor 키워드를 생략할 수 없다.
또, 주생성자가 존재한다면 부생성자는 무조건 주생성자에게 직간접적으로 생성을 위임해야 한다.
따라서 name과 age를 파라미터로 가지는 생성자는 주생성자에게 this(name)을 통해 생성을 위임해야 한다.
class User(val username: String) {
var age: Int = 20
var height: Int = 500
constructor(name: String, age: Int) : this(name) {
this.age = age
}
constructor(name: String, age: Int, height: Int) : this(name, age) {
this.height = height
}
}
만약 주생성자나 부생성자를 구현하지 않을 경우에는 코틀린이 자동으로 인자가 없는 생성자를 자동으로 생성해준다.