// 생성자 변수인 동시에 Class MyFriend의 member 변수. 이 생성자에 있는 포맷은 객체를 할당할 때 반드시 따라야 한다.
class MyFriend(var name: String?,
private var age: Int?,
private var isMarried: Boolean?,
private var nickname: String?) {
var address: String? = null
// 기본 constructor
init { // 첫 번째 생성자가 호출된 이후에 init에서 초기화가 이루어진다.
this.name = "Kang"
this.age = 10
this.isMarried = false
this.nickname = "SeongUk"
}
// 추가 생성자: address변수 추가, 반드시 따르지 않아도 되므로 비교적 유연하다. ('var' on secondary constructor parameter is not allowed)
constructor(name: String?, age: Int, isMarried: Boolean, nickname: String?, address: String?): this(name, age, isMarried, nickname) {
this.address = address
}
}
class Car() { // class Car로 하면 안 된다. Car() <- 이렇게 헤야 생성자 인식
var name: String? = null
var brand: String? = null
var isSuv: Boolean? = null
init {
println("init")
this.isSuv = false
this.brand = null
}
// 이런 식으로 반드시 구현해야 하는 First 생성자는 아무런 변수도 설정하지 않고 secondary 생성자로 유연하게 구현할 수 있다.
constructor(brand: String?): this() {
println("Secondary Constructor")
this.brand = brand
}
constructor(name: String?, isSuv: Boolean?): this() {
this.name = name
this.isSuv = isSuv
}
}
fun main() {
val myFriend = MyFriend(name="KangSeongUk", age=25, isMarried=false, nickname="Aiden")
val myFriend2: MyFriend? = MyFriend("Aiden", 25, true, "Cosmos", "Suwon City")
println("My name is ${myFriend.name}")
println("My address is ${myFriend2?.address}")
// 호출 순서: 첫 번째 생성자 -> init -> secondary 생성자
val car: Car = Car("BMW")
val car2: Car = Car()
val car3: Car = Car("Disney", false)
println(car.brand)
println(car2.brand)
println(car3.name)
}
// 출력
My name is Kang
My address is Suwon City
init
Secondary Constructor
init
init
BMW
null
Disney
'Language > Kotlin' 카테고리의 다른 글
Kotlin에서 Lambda 이것만 외우자 (0) | 2021.01.18 |
---|