Kotlin 기초 : null

정종욱·2023년 7월 4일
0

Kotlin

목록 보기
2/16
post-thumbnail

Kotlin 에서의 null 체크

Java 표현식

public boolean startWithA(String str) {
	return str.startWith("A");
}

위 코드는 안전할까?

정답은 No 이다.
str 은 nullable 하기에 NPE (이하 NullPointException)가 발생할 수 있기때문이다.

public boolean startWithA(String str) {
	if (str == null) {
    	throw new IllegalArgumentException();
    }
	return str.startWith("A");
}

null safe 하게 고친다면 위와 같을 것이다.

Kotlin 표현식

fun startWithA(str: String?): Boolean {
	if (str == null) {
    	throw IllegalArgumentException()
	}
    return str.startWith("A")
}

자바와 별 다를 것 없어보이지만 파라미터 타입을 보면 str 이 nullable 하다는 것을 정확히 명시해주고 있으며
if (str == null) 을 체크하였기에 str.startWith("A") 에서 str 이 not null 임을 알려준다.
또한, 위에서 null 체크가 없었다면 strstartWith() 함수를 호출할 수 없다.

return 값 또한 동일하게 처리된다.

Safe Call 과 Elvis 연산자

코틀린에서는 null 이 가능한 타입을 완전히 다르게 취급한다. 그렇기에 null 이 가능한 타입만을 위한 기능 또한 존재한다.

Safe Call

val str: String? = "ABC"
str.length // 불가
str?.length // 가능

str.length 는 null 일 수 있기에 사용이 불가능하다.
하지만 ? 를 붙여준다면 str 이 null 일 경우 에러를 뱉지않고 null 을 리턴하고 null 이 아닐경우 length 를 리턴한다.

Elvis 연산자

  • Elvis 연산자 : 앞의 연산 결과가 null 이면 뒤의 값을 사용
val str: String? = null
println(str?.length ?: 0)

앞의 str 값이 null 이기에 0을 return 한다.

// java
if (number == null) {
	return 0;
}

// kotlin
number ?: return 0

나아가 자바의 코드를 위와 같이 더 간단히 할 수 있다.

null 아님 단언

nullable type 이지만, 아무리 생각해도 null 이 될 수 없는 경우가 존재한다.

fun startWithA(str: String?) {
	str!!.length
}

이 경우 위와 같이 str 이 nullable 하지만 !! 를 통해 not null 임을 설정해줄 수 있다.

👏 TIP : 코틀린에서 자바를 사용할 경우 return type 이 nullable 하다면 메서드에 @Nullable 을 꼭 붙여주도록 하자.
붙이지 않는다면 코틀린에서는 자동으로 not null 로 인식하게 된다.

0개의 댓글

관련 채용 정보