fun main() {
var p1 = Person("person1")
var p2 = Person(age=5)
var p3 = Person("person2",32)
println(p1.isAdult)
println(p2.isAdult)
println(p3.isAdult)
}
class Person (
// 주생성자
val name: String = "홍길동",
var age: Int = 3) {
/*
val name: String = name
get() = field.uppercase()
*/
// 왜 name.uppercase()가 아니냐면
// get호출 되면 name이 호출 되는데 그러면 또 get()이 호출되고 그안에 또 name이 호출되고... 무한루프
// 그래서 field로 명명 (backing field)
// Customer setter는 웬만하면 안쓴다.
/*
var name: String = name
set(value) {
field = value.uppercase()
}
*/
val upperCaseName: String
get() = this.name.uppercase()
init {
//println("init 호출")
if(age<=0) {
throw IllegalArgumentException("나이는 ${age}일 수 없습니다.")
}
}
// 부생성자 (주생성자 사용 권고)
/*
constructor(name: String): this(name, 1) {
// Body도 만들수 있음
//println("부생성자")
}
constructor(age: Int): this("무기명", age)
*/
//fun isAdult()=age>=20
// 커스텀 getter (프로퍼티처럼 쓴다)
val isAdult: Boolean
get() = this.age >= 20
}