ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kotlin] Custom Getter, Setter
    Kotlin 2024. 12. 19. 08:08
    728x90
    반응형

    단순히 클래스 내의 프로퍼티에 접근해서 해당 프로퍼티의 값을 가져오거나 변경할 때는 게터와 세터를 굳이 쓸 필요가 없다

    왜냐면 코틀린은 알아서 getter, setter를 만들어주기 때문이다

    하지만 해당 프로퍼티를 가져올 때 값을 가공하거나 혹은 다른 프로퍼티와 연관되어 연산값 등을 가져오고 싶을 때는 커스텀 게터세터가 필요하다

    말은 거창하지만 원하는 대로 getter와 setter를 지정해줄 수 있다는 것이다

     

    사용법은 간단하다

    프로퍼티를 선언하고 그 밑에 getter와 setter를 정의해주면 된다

    참고로 val로 선언된 프로퍼티의 경우 재할당이 안 되기 때문에 getter만 가능하다

    class Person(_name: String, _age: Int) {
        private var name: String = _name
        get() = field.uppercase()
    
        private var age: Int = _age	
        get() = field
        set() { field = value}
    
        val status: String
        get() = when (age) {
            in 0..19 -> "당신의 이름은 $name 이고, 나이가 $age 이므로 당신은 미성년자입니다.\n주류를 구매할 수 없습니다"
            in 20..100 -> "당신의 이름은 $name 이고, 나이가 $age 이므로 주류구매가 가능합니다."
            else -> "건강을 위해 술을 끊으시길 권장합니다"
        }
    }
    
    
    fun main(args: Array<String>) {
    
        val person1 = Person("james", 100)
        println("person1의 상태 : ${person1.status}")
        // person1의 상태 : 당신의 이름은 JAMES 이고, 나이가 100 이므로 주류구매가 가능합니다.
        
        val person2 = Person("yeji", 17)
        println("person2의 상태 : ${person2.status}")
        // person2의 상태 : 당신의 이름은 YEJI 이고, 나이가 17 이므로 당신은 미성년자입니다.
    주류를 구매할 수 없습니다
        
        val person3 = Person("hoho", 38)
        println("person3의 상태 : ${person3.status}")
        // person3의 상태 : 당신의 이름은 HOHO 이고, 나이가 38 이므로 주류구매가 가능합니다.
    }
    반응형
Designed by Tistory.