Null을 다루는 방법

parkrootseok·2025년 7월 20일
0

코틀린

목록 보기
2/15
post-thumbnail

Safe Call과 Elvis

함수의 파라미터로 전달되는 값에 null 값이 들어올 수 있을때, Java의 경우는 IF문을 활용해야 합니다. 반면, Kotlin은 Safe CallElvis 연산자를 지원하기 때문에 보다 간단하게 이를 수행할 수 있습니다.

Safe Call

Safe Callnull이 아니면 실행하고, 맞으면 실행하지 않도록 하는 기능입니다. 아래와 같은 활용 예시를 통해 어떻게 동작하는지 살펴보겠습니다.

우선, Safe Call을 사용하지 않고 Java 코드를 변환한 결과입니다.

여기에 함수를 실행하는 주체에 ?를 명시하여 Safe Call을 적용해보면 아래와 같습니다.

적용 결과를 보면 IF문을 사용 코드보다 더 간결하게 작성된 것을 볼 수 있습니다. 그런데, 여기서 1번과 3번 코드는 오류가 발생하는 것을 발견할 수 있습니다. 이는 Safe Call의 경우 null 값이 들어올 경우 null을 반환하기 때문입니다. 그럼 이는 어떻게 해결할까요? 그 방법은 Elvis 연산자에서 알아보도록 하겠습니다.

Elvis

Elvis(?:) 연산자는 앞의 연산 결과가 null일 경우, 선언한 값을 사용하도록 하는 기능입니다. 이 연산자는 Safe Call 를 사용할 경우 null 값이 들어오면 null이 반환되는데, null이 아닌 선언한 값을 반환시키고 싶을 때 다음과 같이 사용할 수 있습니다.

위 결과를 보면, 1번과 3번 함수의 경우 null일 때 null이 아닌 값을 반환하도록 명시했기 때문에, 반환 타입에 ?를 명시하지 않아도 정상적으로 작동하는 것을 볼 수 있습니다.

!! 연산자

!! 연산자는 '이 변수는 절대 null이 아니야!' 라고 컴파일러에게 강제로 알려주는 용도로 사용됩니다. 하지만, 아래와 같이 실제로 null이 들어오면 NullPointerException이 발생하기 때문에 안전하지 않은 연산입니다.

Platform Type

Platform Type은 Kotlin이 null 관련 정보를 알 수 없는 Type을 말합니다. 아래와 같이 Java 코드로 작성된 Person 클래스를 Kotlin 코드에서 사용하게 될 경우 name에 null이 발생할 수 있지만 컴파일러는 이를 알 수 없습니다.

그렇기 때문에, Kotlin에서 Java로 작성된 Class를 사용할 경우 아래와 같이 반드시 컴파일러가 null 발생 여부를 판단할 수 있도록 어노테이션을 활용하여 관련 정보를 명시해주어야 합니다.

profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글