연습장/이론

Kotlin_ 7. 지연 초기화

아이른 2024. 1. 29. 18:04

지연 초기화?

: 클래스를 설계할 때 안정성을 위해 반드시 변수의 값을 초기화할것을 권장.

: 클래스 안의 프로퍼티를 만들 때, 특정조건에 의해 사용되지 않으면 그 만큼의 자원이 낭비가 됨. 그 메모리가 낭비되는 걸 막기 위해서 나온 기술. 

 

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