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}")
}