description
코틀린 프로퍼티
1. 최상위 프로퍼티
클래스에 포함되지 않은 프로퍼티로 전역 변수/ 상수의 역할을 하는 프로퍼티입니다.
public/internal/private 등의 가시성 지정이 가능합니다.
private val prefix = "Hello World"
fun main () {
fun readInt() = readLine()!!.toInt()
}
2. 늦은 초기화
생성자에서 초기화 되지는 않지만, 프로그램 흐름 상 실 사용 시에는 초기화 되는 것이 명백할 경우가 있씁니다. 이런 경우 lateinit이라는 예약어를 사용합니다. 하지만 이 경우 프로그래머가 반드시 초기화하는 코드를 작성해주어야합니다. 만약 실수로 초기화를 하지 않는 경우 UninitializedPropertyAccessException이 발생합니다. ( 가능하면 by lazy를 권장합니다) 참고로 lateinit 은 var에서만 사용가능합니다.
3. 지연 계산 프로퍼티
프로퍼티에 접근할 때까지 프로퍼티 값에 대한 연산을 지연합니다.
class Content(var file: File) {
val text by lazy {
print("reding text from file")
file.readText() }
}
fun main () {
val c = Content(File("Quiz.txt"))
println("Before access text")
println(c.text)
}
c.text에서 값을 읽는 순간에 초기화가 진행됩니다.
4. 커스텀 접근자
프로퍼티에 대한 접근을 함수로 수행합니다.
4-1 get()을 통해 프로퍼티에 대해 접근
fullName이라는 프로퍼티 자체에 값을 저장하는 것이 아니라, get() 메서드가 호출되어 값을 return하는 구조입니다.
class Person(val firstName: String, val familyName: String) {
val fullName: String
get() {
return "$firstName $familyName"
}
}
fun main () {
val p = Person("Charlie", "kim")
println(p.fullName)
}
4-2 뒷받침 하는 필드
커스텀 접근자 게터를 사용하는 경우도 메모리에 뒷받침하는 필드를 두어 값을 저장할 수 있습니다. 이 경우 field라는 예약어로 해당 필드에 접근합니다.
class Person(val firstName: String, val familyName: String, age: Int) {
val age: Int = age
get(): Int {
return field
}
}
fun main () {
val p = Person("Charlie", "kim", 25)
println(p.age)
}
4-3 가변 프로퍼티를 위한 세터(setter)
var 프로퍼티를 위해서는 set(value)를 통해서 setter를 둘 수 있다.
class Person(val firstName: String, val familyName: String) {
var age: Int? = null
get(): Int? {
return field
}
set(value) {
field = value
}
}
fun main () {
val p = Person("Charlie", "kim")
println("set 전: ${p.age}")
p.age = 40
println("set 후: ${p.age}")
}
4-4 프로퍼티 접근자를 통한 접근 통제
프로퍼티의 get / set에 대해 다른 접근자를 두어 접근을 통제할 수 있습니다.
class Person(name: String) {
var lastChanged: Date? = null
private set
var name = name
set(value) {
lastChanged = Date()
field = value
}
}
'프로그래밍 언어 > Kotlin' 카테고리의 다른 글
[Kotlin] 객체 (0) | 2022.10.13 |
---|---|
[Kotlin] null 정리 (0) | 2022.10.11 |
[Kotlin] 코틀린 클래스, 생성자 (0) | 2022.10.09 |
[Kotlin] 코틀린 함수 (1) | 2022.10.08 |
[Kotlin] 코틀린 문자열과 배열 (1) | 2022.10.08 |