지연 초기화?
: 클래스를 설계할 때 안정성을 위해 반드시 변수의 값을 초기화할것을 권장.
: 클래스 안의 프로퍼티를 만들 때, 특정조건에 의해 사용되지 않으면 그 만큼의 자원이 낭비가 됨. 그 메모리가 낭비되는 걸 막기 위해서 나온 기술.
lateinit?
: var 전용 지연초기화. 기본값.
fun main() {
lateinit var person: Person
//데이터 타입 : 기본형은 사용할 수 없음. (Int,Long,Float,Double)
}
class Person{
var name = ""
var age = ""
var tel = ""
}
fun main(){
var s1 = Student()
s1.name = "참새" //name을 넣었을 때, 초기화가 되어 displayInfo() 실행
s1.displayInfo()
s1.age = 10
s1.displayInfo()
}
class Student {
lateinit var name:String
var age:Int = 0
fun displayInfo() {
println("이름은: ${name} 입니다.")
println("나이는: ${age} 입니다.")
}
}
//print
이름은: 참새 입니다.
나이는: 0 입니다.
이름은: 참새 입니다.
나이는: 10 입니다.
isInitialized?
: 변수를 사용하기전에 초기화되었는지 확인해야 안정성을 높임. (true/false)
: 참조 형태로 사용_ this:: 또는 ::
fun main(){
var s1 = Student()
s1.name = "참새"
s1.displayInfo()
s1.age = 10
s1.displayInfo()
}
class Student {
lateinit var name:String
//name이 lateinit으로 잡혀있는데, 사용하기 전에 과연 초기화를 하는지?
var age:Int = 0
fun displayInfo() {
if(this::name.isInitialized) {//초기화 확인 isInitialized
println("이름은: ${name} 입니다.")//true, 초기화 코드 실행
println("나이는: ${age} 입니다.")
} else {
println("name변수를 초기화해주세요.")//false, 코드 실행 X
}
}//만약, 초기화하가 이루어 지지 않았는데 실행하면 에외 발생
}
//print
이름은: 참새 입니다.
나이는: 0 입니다.
이름은: 참새 입니다.
나이는: 10 입니다.
lazy?
: val 전용 지연초기화. 값을 바꾸는 경우가 없을 때 사용.
fun main() {
val age by lazy { Parson() }
//val 변수명 by lazy (변수에 들어갈 클래스 생성자 또는 값)
}
class Person{
var name = ""
var age = ""
var tel = ""
}
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} 입니다.")
}
}
//print
이름은: 참새 입니다.
나이는: 0 입니다.
address 초기화 //초기화가 되었을 때 한 번 실행
주소는: seoul 입니다.
이름은: 참새 입니다.
나이는: 10 입니다.
주소는: seoul 입니다.
'연습장 > 이론' 카테고리의 다른 글
Kotlin 연산자 이론 (0) | 2024.02.07 |
---|---|
미션 리스트_ 앱개발 용어정리 1, 2 (0) | 2024.01.31 |
Kotlin_ 6-1. Null-Safety (0) | 2024.01.29 |
클래스 2. 주생성자와 보조생성자 (0) | 2024.01.26 |
클래스 1. 클래스의 사용 (1) | 2024.01.26 |