📝 학습목표 : Nullable과 NonNull의 사용법을 알아보자.
코틀린은 자바와 달리 변수를 선언할 때 Nullable과 NonNull로 지정할 수 있는 기능을 제공한다. 코드를 실행하기 전인 컴파일 시점에 null에 대한 여부를 미리 파악할 수 있어 코드의 안정성을 향상시킬 수 있다. 코틀린에서 사용되는 Nullable과 NonNull의 예시 코드를 통해 실제로 어떻게 사용되는지 살펴보자.
NonNull 데이터가 null일 수 없는
기본적인 NonNull 타입이다.
name은 NonNull이기 때문에 대문자 변환 함수인 toUpperCase()를 바로 사용할 수 있다. (함수를 사용하기 위해서는 null이면 안됨)
Nullable 데이터가 null일 수 있는
String 타입 옆에 '?' 물음표를 붙이면 Nullable 타입이 된다. (물음표를 넣어줘야 하기 때문에 타입을 생략하면 안됨)
nullable한 문자열을 선언한 nullName에 함수를 사용할 때 '?'를 빠트린다면,
아래와 같이 빨간줄이 생기면서 String? 유형의 null 허용 수신자에서는 '?' 또는 null이 아니라는 '!!' 호출만 허용된다는 메시지가 뜬다.
nullName이 눌인지 아닌지 모르기 때문에 사용해야할지 모르겠다는 상황이다.
이렇게 코틀린은 컴파일 타임에서 오류를 알려주기 때문에 런타임 전에 오류를 잡을 수 있다.
'?'를 붙였을 때 null이면 null을 반환하고 non-null이면 toUpperCase()를 실행한다.
코틀린에서는 if else를 사용하지 않고 '?' 연산자 하나만으로 처리한 것이다.
?: Elvis operator
Elvis 연산자는 nullable한 변수가 null일 경우 지정된 기본값을 반환하는 역할을 한다.
'nullable 변수 ?: 기본값' 형태로 사용되며 nullable 변수가 null이 아니면 해당 변수의 값을 반환하고, null이면 기본값을 반환한다.
lastName이 null인지 non-null인지 체크하고 lastName이 없으면(null이면) "No LastName"을 출력한다.
lastName이 null이기 때문에 "No LastName"을 반환한다.
반대로 lastName이 non-null이면 해당 변수값인 Harry Potter를 반환한다.
!!: NonNull assertion operator
NonNull 단정 기호(NonNull assertion operator)라고 불리는 이 연산자는 해당 변수가 null이 아니라고 단정하고 컴파일러에게 null이 아니니까 null이 아니라고 생각하라고 지시한다. 변수가 null인 경우에는 NullPointerException이 발생할 수 있다. null 체크 없이 변수를 사용하기 때문에 사용시 주의해야 한다.
ignoreNulls 함수는 하나의 nullable한 문자열 매개변수 str을 받는다.
str을 NonNull 단정 기호(!!)를 사용하여 non-null로 변환한 후 notNull에 할당한다.
let 람다식 호출 함수
코틀린에서도 let 함수를 사용한다. let 함수는 람다식을 호출하는 함수이며 null이 아닌 객체를 처리할 때 코드를 간결하게 유지할 수 있는 장점이 있다.
nullableValue?.let { /* 수행할 작업 */ }
nullableValue가 null이 아닌 경우에만 람다식 내부의 코드가 실행된다.
* 람다는 중괄호로 묶인 코드블럭이다. 람다식에 대한 자세한 내용은 2024.03.09 - [Language/Kotlin] - [Kotlin] 람다식 활용법에 정리되어 있다.
email이 null이 아닌 경우에만 let { 수행할 작업 } 중괄호 안의 작업을 실행한다.
let 함수는 자신의 receiver 객체(즉 email)를 람다식 내부로 옮겨서 실행하는 구문이다. 그러니까 email이 null이 아니면 실행, null이면 println은 전혀 실행되지 않기 때문에 안전하다고 볼 수 있다.
참고 자료⎜https://www.youtube.com/watch?v=IDVnZPjRCYg
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 람다식 활용법 (0) | 2024.03.09 |
---|---|
[Kotlin] Class 사용법(+오버라이딩) (0) | 2024.03.07 |
[Kotlin] 반복문 for & while (0) | 2024.03.02 |
[Kotlin] Array & List 특징과 사용법 (0) | 2024.02.29 |
[Kotlin] 조건문 if & when(+Expression과 Statement 차이, Unit) (1) | 2024.02.27 |