Kotlin 기초 #4 Null Safety, 지연 함수

빠르게 진도 나가는 Kotlin 기초강의 3번째 시간입니다~

💕 1. Nullable

자바에서는 널을 넣어도 상관없었다.

String pongPong = "퐁퐁"
pongPong = null
그만큼 위험하기도 했는데 null이 잘들어가는 만큼 Null Pointer Exepction이 자주났다.🤣🤣

다음껄 확인해보자

    var myName:String = "퐁퐁"
    myName = null //에러

똑같은 구문이지만 에러가 난다. Kotlin에선 Null을 받으려면 ?를 써야한다.

	//nullable이다.
    var myName:String? = "퐁퐁"
    myName = null //에러

🚲 2. Safe Call

이제 SafeCall을 알아보자.
SafeCall은 Null이 아닐때만 액션을 취할수있게 해준다.

val str:String? = null
val upper = str?.toUpperCase()

var number:Int? = null 
var result = number?.plus(37)
Null값을 가지고 있기때문에 toUpperCase() , plus가 동작하지 않는다.

🐱‍🏍 3. Elvis Expression

?가 Elvis머리와 같다고 탄생한 Elvis Expression이다.

val str:String? = null

//Elvis Expression
val upper = str?.toUpperCase() ?: "초기화 하세요!"
var result = number?.plus(37)  ?: 51
만약 Null이 들어올경우 , ?: 뒤가 값이되어 NullPointer를 못하게 막는다.

🐱‍💻 4. lateinit

        //지연초기화
        // lateinit var 변수명:타입
        //변수가 아닌 클래스에 많이 쓰인다.
       lateinit  var Person:String // 참조형에만 사용이 가능하다.
       lateinit var myName:String? //에러. Null값이 허용되지않는다.
       /
       
        lateinit var person : Person // 초기화를 지연시켰다.
        person = Person()     //이제 초기화 시켰다. 메모리에 올라감.
        person.address = "취킨"
       

    class Person{
        var name = ""
        var age = ""
        var address =""
        var tel = ""
    }

🚗 5. lazy

        //값이 바뀌지않는 초기화: 읽기전용
       val age by lazy{Person}
       
       
        val hong : Int by lazy {
        println("아프리카 태생 국민이")
        100
    }
    
    fun main() {
    val account = Account()
    println(account.balance)
    println(account.balance)
}

//ㅣlazy 의 {}은 변수가 처음 사용될때 한번 호출되며, 마지막값이 초기값으로 할당
//아프리카 태생 국민이
//100
//100

lateinit vs lazy

좋은 웹페이지 즐겨찾기