2023-04-07
1.?(Elvis Operation) 엘비스 연산자
코틀린에? 엘비스 연산자라고 불리며, 변수의 안전한 호출을 가능하게 해 준다. 아래의 코드에서 str 변수는 타입에? 기호 없이 선언하여 컴파일 단계에서 에러가 발생하는 반면 str_1의 경우 타입에? 를 붙여 에러가 발생하지 않는다.
fun main() {
var str : String = "Hello World"
str = null
//error
var str_1: String? = "Hello World"
str_1 = null
//Nullable
//
val str_2: String? = null
print(str_2.toString()) // Logs "null", does not throw an exception
}
2. safe call
?. 연산자는 a 또는 b가 null의 아닐경우 length를 리턴하고 null일 경우 null을 리턴합니다. b의 경우?. 연산자를 붙이지 않고 호출 시 컴파일 에러가 발생합니다.
fun main() {
val a = "Kotlin"
val b: String? = null
println(b?.length)
println(a?.length) // Unnecessary safe call
// println(b.length)
// Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
}
3. if 문 null 표현
또한 if 문에 표현을 ?: 기호를 사용하여 표현할 수 도 있다. 아래의 val c와 val d는 동일한 동작을 한다.
fun main() {
val b:String? = null
val c: Int = if (b != null) b.length else -1
println("c-> $c")
val d = b?.length ?: -1
println("d-> $d")
}
?: 를 조금 더 자세히 표현하면 ?: 왼쪽에 있는 표현식이 null이 아니면 Elvis 연산자는 이를 반환하고, 그렇지 않으면 오른쪽에 있는 표현식을 반환합니다. 오른쪽의 식은 왼쪽이 null인 경우에만 리턴됩니다.
4. The!! operator
null이 아닌 assert 연산자(!!)는 모든 값을 null이 아닌 유형으로 변환하고 값이 null인 경우 예외를 throw 합니다. b!!라고 작성하면 b의 null이 아닌 값을 반환하거나 b가 null인 경우 NPE(Null Pointer exception)를 발생시킵니다.
fun main() {
val a = "Kotlin"
val b: String? = null
//val c = b!!.length //java.lang.NullPointerException
//println("c -> $c")
val d = a!!.length
println("d -> $d")
}
모든 코드는 아래의 링크에서 테스트 해볼 수 있습니다.
메인 이미지 출처 : 사진: Unsplash의Anita Austvika