속성 : 클래스에 포함되는 변수
메소드 : 클레스에 포함되는 함수
class Person(var name: String, val birthYear: Int) {
init {
println("${this.birthYear}년생 ${this.name} 입니다.")
}
}
init은 초기화 블록입니다. init 블록에 클래스를 생성할 때 필요한 코드를 작성합니다. 받아온 값을 클래스 내 변수에 할당하거나 할 때 사용할 수 있지만, 코틀린에서는 굳이 그럴 필요 없습니다.
클래스명 옆의 괄호에 있는 파라미터에 val, var 을 붙임으로써 name과 birthYear을 클래스내에서 따로 선언과 초기화 해줄 필요없이 받아온 값을 그대로 쓸 수 있습니다.
fun main() {
val a = D("h_hi", 26,160)
}
class D(val name: String) {
var age: Int = 20
var height: Int = 500
init {
println("$name 입니다")
}
constructor(name: String, age: Int) : this(name) {
this.age = age
println("2번째 constructor")
}
constructor(name: String, age: Int, height: Int) : this(name, age) {
this.height = height
println("3번째 constructor")
}
}
👉 결과
h_hi 입니다
2번째 constructor
3번째 constructor
보조 생성자는 constructor 라는 키워드로 시작하며, 기본 생성자를 상속해야 합니다.
name, age를 파라미터로 받는 2번째 constructor 는 기본 생성자를 상속받고, name, age, heihgt 를 파라미터로 받는 3번째 constructor 는 기본 생성자를 상속받은 두번째 생성자를 상속받는 다는 것을 위의 코드 결과로 알 수 있습니다.
또한, 보조 생성자는 기본 생성자와 달리 val, var 를 사용하여 초기화를 할 수 없으므로, 생성될 때 값을 초기화 해주어야 합니다.
init 블럭과 보조생성자의 호출 순서는 init 블럭이 먼저 호출됩니다.