코틀린의 프로퍼티에 알아보자
클래스의 field + 접근자 메소드 = 프로퍼티
라 한다. fun main(args: Array<String>) {
val user = User()
println("Name: ${user.name}, Age: ${user.age}")
}
class User {
var name: String = "jang"
/* get() = field
set(value) {
field = value
}*/
val age: Int = 10
// get() = field
}
주석을 제거해도 동일한 결과를 출력한다.
user.name = "kim" or println("${user.name}")
을 수행하게 되면 내부적으로 set(), get() 메소드를 호출한다.
Java 형태로 set(), get() 메소드를 이용하여 name 변수에 접근하는 코드이다.
fun main(args: Array<String>) {
val user = User()
user.name = "jang"
println("Name: ${user.name}, Age: ${user.age}")
}
class User {
var name: String
get() = name
set(value) {
name = value
}
val age get() = 10
}
get() 과 set() 둘 다 StackOverFlow가 발생한다.
따라서, StackOverflow가 발생하지 않게 Backing field를 이용하여 코드를 수정하면 아래와 같다.
class User {
var name: String = "jang"
get() = field
set(value) {
field = value
}
val age get() = 10
}
1. get(), set() 내부에서는 field 값으로 접근한다.
2. var로 선언한 프로퍼티는 set(), get() 둘 다 정의할 수 있지만 val은 get()만 가능하다.