lazy
lazy 사용예시
fun main(){ var s1 = Student() s1.name = "참새" s1.displayInfo() s1.age = 10 s1.displayInfo() }
class Student {
lateinit var name:String
var age:Int = 0
val address: String by lazy {
println("address 초기화")
"seoul"
}
fun displayInfo() {
println("이름은: ${name} 입니다.")
println("나이는: ${age} 입니다.")
println("주소는: ${address} 입니다.")
}
}
- by lazy 후 값을 입력해주는 방법으로 사용한다.
- 사용하는 시점에 값을 초기화 하고 대입한다.
- 출력값
![](https://velog.velcdn.com/images/lazzzykim/post/090ab8ec-7bec-42eb-abce-011a930827a0/image.png)
# Null Safety
```kotlin
fun main() {
var s = Student()
s.name = "참새"
s.address = "서울"
s.displayInfo()
}
class Student {
lateinit var name: String
var address: String? = null
fun displayInfo() {
println("이름은: ${name} 입니다")
println("주소는: ${address} 입니다")
}
}
- String?은 널을 허용한다는 뜻이다. adress에 서울이 들어가지 않으면 null값을 출력한다.
세이프콜
fun main(){
var s = Student()
s.name = "참새"
s.displayAddressLength()
s.address = "서울"
s.displayInfo()
}
class Student {
lateinit var name:String
var address:String? = null
fun displayInfo() {
println("이름은: ${name} 입니다")
println("주소는: ${address} 입니다")
}
fun displayAddressLength() {
println("주소의 길이는: ${address?.length} 입니다")
}
}
- 세이프콜 (?.)은 널이 아닐경우에 참조하는 메서드를 실행한다.
- 반대로 null일 경우엔 실행되지 않음
엘비스 연산자
fun main(){
var s = Student()
s.name = "참새"
s.displayAddressLength()
s.address = "서울"
s.displayInfo()
}
class Student {
lateinit var name:String
var address:String? = null
fun displayInfo() {
println("이름은: ${name} 입니다")
println("주소는: ${address} 입니다")
}
fun displayAddressLength() {
println("주소의 길이는: ${address?.length ?: "초기화하세요"} 입니다")
}
}
- null 일 경우에 "초기화하세요" 라는 문구가 출력이 되게 할 수있다.