-
[Kotlin] Custom Getter, SetterKotlin 2024. 12. 19. 08:08728x90반응형
단순히 클래스 내의 프로퍼티에 접근해서 해당 프로퍼티의 값을 가져오거나 변경할 때는 게터와 세터를 굳이 쓸 필요가 없다
왜냐면 코틀린은 알아서 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 이므로 주류구매가 가능합니다. }
반응형'Kotlin' 카테고리의 다른 글
[Kotlin] 지연초기화(lateinit, by lazy), 위임(by) (0) 2024.12.20 [Kotlin] Scope functions(let, also, apply, with, run, use) (1) 2024.12.03 [kotlin] String.format (3) 2024.11.07 [Kotlin] 기본타입(Primitive Types) (3) 2024.09.28