Kotlin

Kotlin - 프로퍼티의 접근

J_Bin 2022. 6. 14. 17:14

# 커스텀 게터와 세터의 사용

package chap02.section1

class User(_id : Int, _name : String, _age : Int) {

    val id : Int = _id

    var name : String = _name
        set(value) {
            println("The name was changed")
            field = value.toUpperCase()     // 받은 인자를 대문자로 변경해 프로퍼티에 할당
        }

    var age : Int = _age

}




fun main() {


    val user1 = User(1,"jkb",30)        // 처음 객체를 만들 때는 name의 세터가 적용되지 않으므로 소문자 jkb가 출력된다.
    println("user3.name = ${user1.name}")       
    user1.name = "coco"                     // 여기서 사용자 고유의 출력 코드가 실행
    println("user3.name = ${user1.name}")




}

 

# 보조 프로퍼티의 사용

package chap02.section1

class User(_id : Int, _name : String, _age : Int) {

    val id : Int = _id

    // tempName은 이름이 null이 되는 경우를 처리하기 위해 임시적으로 사용하는 프로퍼티이다.
    // 이런 경우 보조 필드인 field를 사용하지 않고 추가로 내부의 프로퍼티를 임시로 선언해 사용 할 수 있다.
    // 이것이 보조 프로퍼티이다.
    
    private var tempName : String? = null
    var name : String = _name
        get() {
            if (tempName == null) tempName = "NONAME"
            return tempName ?: throw java.lang.AssertionError("Asserted by others")
        }

    var age : Int = _age

}




fun main() {

    val user1 = User(1,"jkb",35)
    user1.name = ""
    println("user3.name = ${user1.name}")






}

 

# 프로퍼티의 오버라이딩

package chap02.section1

/* 프로퍼티 오버라이딩 */

open class First {
    open val x : Int = 0
        get() {
            println("First x")
            return field
        }
    val  y : Int = 0
}

class Second : First() {
    override val x : Int = 0
        get() {
            println("Second x")
            return field + 3
        }

}




fun main() {

    val second = Second()
    println(second.x)
    println(second.y)






}

 

# review

package chap02.section1

class FakeAge() {
    var age : Int = 0
        set(value) {
            field = when {
                value < 18 -> 18
                value in 18..30 -> value
                else -> value - 3

            }
        }
}



fun main() {

    val kim = FakeAge()
    kim.age = 15
    println("kim's real age = 15, pretended age = ${kim.age}")

    val hong = FakeAge()
    hong.age = 35
    println("hongs's real age = 35, pretended age = ${hong.age}")

}