경제적 자유를 위해

열심히 살아보자

옛날 작성 글/Kotlin

[Kotlin CS] 코틀린 - 널 안정성(엘비스 ?:, ?., as?, !!, lateinit)

따식 2023. 10. 26. 22:52
728x90

널 안정성
 엘비스 ?: 연산자
 엘비스 연산자는 널값을 허용하지 않는 변수에 널 값이 들어 갔을때 널 값을 변환할 수 있는 함수의 결과를 만들어 줍니다. 글로 풀어 쓰니 복잡해 보이지만 이것을 코딩으로 적어보면 간단합니다.

class Elvis {
    var yts: String? = null

    fun elvis() {
        val name: String = yts ?: "YTS" //yts라는 변수는 현재 null 이기때문에 결과적으로 name에 'YTS'라는 값이 들어가겠네요.

        val nameTwo: String = yts ?: return //함수자체를 return 시키도록 만들 수 도 있습니다.

        val nameThree: String =
            yts ?: throw NullPointerException() //yts라는 변수는 현재 null 이기때문에 결과적으로 NullPointerException 예외가 발생하겠네요.
    }
}

 
 안전한 호출 ?. 연산자
 코틀린 에서는 안전한 호출 연산자를 이용하여 null값에 대해 안전하게 변수를 지정하고 불러 올 수 있습니다.

class Names {
     var name: String? = null

}

class Safe {

    fun safeGetName() {
        val names: Names? = Names()

        val name: String = names?.name ?: "No Name"
    }
}

 
 안전한 자료형 변환 as? 연산자
 as? 연산자는 자료형 변환에 대해 안전하게 변환 할 수 있도록 도와줍니다.

class As {

    fun As() {
        val animal: String = "호랑이"

        val value: Int = animal as? Int ?: 0 //Int 로 변환 할 수 없으므로 0으로 빠지게 됩니다.
    }
}

 널 값 보증 !! 연산자
 상황에 따라 Null이 아닌 값만 포함되는 경우가 생길 수 있습니다. 그럴때 임의로 널값이 안들어온다는 보증을 해주는 연산자가 !! 연산자 입니다. 하지만 널값이 들어오게 되면 오류가 발생하므로 유의하셔서 써주셔야합니다.

fun nonNull() {
    val animal: String = "호랑이"

    val animalName: String = animal!! // animal은 절대 null값이 아니기때문에 !!연산자로 보증합니다.
}

 
 나중 초기화를 위한 lateinit 키워드
  클래스에서 변수를 만들때에 상황에 따라 나중에 따로 초기화를 수행하는 경우가 생깁니다. 그럴때 사용되는 키워드가 lateinit 키워드입니다. lateinit 키워드를 사용하면 초기화 없이 변수설정이 가능합니다.

class LateInit {
	lateinit var name: String
}

 하지만 초기화를 안해주고 사용하시면 마찬가지로 null 오류가 발생하므로 초기화 작업을 유의하여 해주시기 바랍니다.

2023.10.26 - [개발/Kotlin] - [Kotlin CS] 코틀린 - 기본 구문

728x90