Null Safety

고성욱·2023년 3월 20일
0

안드로이드

목록 보기
18/26

Null safety란 코틀린에서 null 값을 다룰 때 발생하는 오류를 줄이고 안정적인 코드를 작성하기 위한 기능입니다.

코틀린에서는 기본적으로 null 값을 허용하지 않으며, null 값을 다루기 위해서는 nullable 타입을 사용해야 합니다. nullable 타입은 해당 변수에 null 값을 할당할 수 있도록 해줍니다.

하지만 nullable 타입을 사용할 경우, null 값을 처리하지 않고 그대로 사용하면 NullPointerException이 발생할 수 있습니다. 이를 방지하기 위해 코틀린에서는 안전한 호출(Safe call) 연산자인 ?.와 엘비스 연산자(?:)를 제공합니다.

?. 연산자는 해당 변수가 null이 아닐 때만 호출하고, null일 경우 null을 반환합니다. 엘비스 연산자(?:)는 해당 변수가 null일 경우 대체값을 반환합니다.

또한 코틀린에서는 null 체크를 강제하는 Non-null 타입을 제공합니다. 이를 사용하면 해당 변수에 null 값을 할당할 수 없어 NullPointerException을 방지할 수 있습니다.

이러한 null safety 기능을 적절히 활용하면 안정적이고 오류가 적은 코드를 작성할 수 있습니다.

변수에 null 허용

var nullable: String? //타입 다음에 물음표를 붙여 null 값을 입력할 수 있다.
nullable = null

var notNullable = String
notNullable = null //일반 변수엔 Null을 입력할 수 없습니다. 

함수 파라미터에 null 허용

fun printLength(str: String?) {
    println(str?.length ?: "null")
}

fun main() {
    val str: String? = null
    printLength(str)
}

위 코드는 printLength 함수를 정의하고, main 함수에서 printLength 함수를 호출하는 코드입니다.

printLength 함수는 nullable한 String 타입의 매개변수 str을 받아 해당 문자열의 길이를 출력합니다. 이 때, str?.length와 같이 안전한 호출 연산자 ?.를 사용하여 str이 null일 경우 null을 반환하도록 합니다. 또한, ?: 연산자를 사용하여 str?.length가 null일 경우 대체값인 "null"을 반환하도록 합니다.

main 함수에서는 nullable한 String 타입의 변수 str을 null로 초기화하고, printLength 함수를 호출합니다. 이 때, printLength 함수에서 안전한 호출 연산자와 엘비스 연산자를 사용하여 str이 null일 경우 "null"을 출력합니다.

함수의 리턴 타입에 null 허용

함수의 리턴타입에 물음표를 붙여서 null 허용 여부를 설정 할 수 있습니다.

fun nullReturn(): String?{
		reutn null
	}

안전한 호출 연산자 ?. & 엘비스 연산자 (?:)

안전한 호출 연산자인 ?.은 해당 변수가 null이 아닐 때만 호출하고, null일 경우 null을 반환합니다. 또한, 엘비스 연산자(?:)는 해당 변수가 null일 경우 대체값을 반환합니다.

var nullable: String? //타입 다음에 물음표를 붙여 null 값을 입력할 수 있다.
nullable = null

var notNullable = String
notNullable = null //일반 변수엔 Null을 입력할 수 없습니다.

fun printLength(str: String?) {
    println(str?.length ?: "null")
}

fun nullReturn(): String?{
    return null
}

위 코드는 nullable한 String 타입의 변수 nullable을 선언하고, null 값을 할당하는 코드입니다. 또한, 일반적인 String 타입의 변수 notNullable은 null 값을 할당할 수 없습니다.

printLength 함수는 nullable한 String 타입의 매개변수 str을 받아 해당 문자열의 길이를 출력합니다. 이 때, str?.length와 같이 안전한 호출 연산자 ?.를 사용하여 str이 null일 경우 null을 반환하도록 합니다. 또한, ?: 연산자를 사용하여 str?.length가 null일 경우 대체값인 "null"을 반환하도록 합니다.

nullReturn 함수는 nullable한 String 타입의 값을 리턴하며, 이를 통해 null 값을 리턴할 수 있음을 보여줍니다.

profile
안드로이드, 파이썬 개발자

0개의 댓글