■ 보조 생성자(secondary constructor)
보조 생성자는 클래스 블록 안에서 정의합니다. 키워드 constructor를 사용해 보조 생성자를 정의합니다. 실행 순서는 주 생성자(선언되어 있으면)와 init 블록을 실행하고 나서 보조 생성자를 실행합니다. 보조 생성자는 속성을 정의할 수 없기 때문에, 보조 생성자의 형식 인자 이름에는 키워드 val 또는 var 를 붙일 수 없습니다.
class Person {
val name:String
var age:Int
var isMarried:Boolean
constructor(name:String, age:Int, isMarried:Boolean) { // 보조 생성자
this.name = name
this.age = age
this.isMarried = isMarried
}
}
보조 생성자는 여러 개 정의할 수 있지만, 각 보조 생성자의 형식 인자 갯수가 달라야 합니다. 보조 생성자는 형식 인자 갯수가 적은 보조 생성자의 초깃값 위임(delegation)을 사용할 수 있습니다. 생성자 다음에 콜론(:)을 붙이고 this를 사용해 다른 보조 생성자를 호출할 수 있습니다.
class Person {
val name:String
var age:Int
var isMarried:Boolean
constructor(name:String, age:Int, isMarried:Boolean): this(name, age) {
this.isMarried = isMarried
}
constructor(name:String, age:Int) {
this.name = name
this.age = age
this.isMarried = false
}
}
클래스에서 주 생성자를 선언했다면 어떻게 할까요? 보조 생성자는 주 생성자의 속성 초깃값 위임을 사용해야 합니다. 이때 보조 생성자는 주 생성자에서 초기화하지 않는 속성을 형식 인자로 전달받아야 합니다. 즉, 주 생성자의 속성 갯수와 보조 생성자의 형식 인자 갯수는 달라야 합니다.
class Person (val name:String, var age:Int) {
var isMarried:Boolean = false
constructor(name:String, age:Int, isMarried:Boolean): this(name, age) { // 보조 생성자
this.isMarried = isMarried
}
}
'코틀린' 카테고리의 다른 글
코틀린: enum class(updated) (0) | 2025.01.06 |
---|---|
코틀린: 클래스 속성 - getter와 setter(updated) (0) | 2025.01.06 |
코틀린: 생성자와 속성 초기화 - 주 생성자 (0) | 2025.01.06 |
코틀린: 확장 함수와 수신 객체를 갖는 함수 타입(3/3) (0) | 2025.01.06 |
코틀린: 확장 함수와 수신 객체를 갖는 함수 타입(2/3) (0) | 2025.01.06 |