lateinit (늦은 초기화)
- 변수를 선언하고 나서 나중에 값을 넣으려 할 때 null로 넣어 놓는 경우가 있다. 하지만 나중엔 꼭 값을 넣어야 되지만 실수로 잊어버리면 error가 날 것이다.
- lateinit는 그걸 방지해준다. 즉 선언은 하지만 나중에 꼭 초기화를 할 거라고 알려준다. 그러지 않으면 컴파일 에러를 낸다.
- 또한 값이 나중에 변경됨으로
var
를 사용한다.
fun main() {
var car1 = Car()
car1.maxSpeed
}
class Car () {
lateinit var maxSpeed : String
init {
}
}
get(), set()
- Java의 getter(), setter()와 비슷하다.
- 형식은 이렇다
var maxSpeed : Int = 200
get() = field
set(value) {
field = value
}
- 변수 밑에 기본적으로 만들어져 있다.
- get()은 변수의 값을 return하고
- set()은 변수의 값을 재정의한다.
fun main() {
var car1 = Car()
car1.maxSpeed = 220
println("${car1.name}")
println("${car1.maxSpeed}")
println("${car1.model}")
}
class Car ( ){
var maxSpeed : Int = 200
get() = field
set(value) {
field = value
}
var name : String = "CHOCO"
get() {
return field.toLowerCase()
}
set(value) {
field = if(value.length < 10) value
else throw Exception("너무길어요")
}
var model : String = "KIA"
private set
}
- get(), set()는 사용자가 설정할 수 있는다.
- name 변수 처럼 get()에서 호출 시 리턴 값을 수정할 수 있고, set()에서 재정의 시 상황을 만들어 수정할 수 있다.
- model 변수 처럼 set 자체를 private를 해서 이외의 클래스에서 수정이 불가하게 만들 수도 있다. 이때는 get()은 private가 아니므로 호출할 수는 있다.