[Kotlin] Class

유존돌돌이·2023년 3월 21일
0

Kotlin

목록 보기
1/10
post-thumbnail
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
}

0개의 댓글