Kotlin에서의 Null체크
public boolean startsWithA(String str) {
return str.startsWith("A");
}
- java에서는 해당 메소드에 str이 Null로 들어오면 NullPointerException이 발생한다.
- 이 메소드에 다음과 같이 작성할 수 있다.
public boolean startsWithA1(String str) {
if (str == null) {
throw new IllegalArgumentException("Null이 들어왔습니다");
}
return str.startsWith("A");
}
public Boolean startsWithA2(String str) {
if (str == null) {
return null;
}
return str.startsWith("A");
}
public boolean startsWithA3(String str) {
if (str == null) {
return false;
}
return str.startsWith("A");
}
- 첫번째, null이 들어왔을 때 IllegalArgumentException을 호출한다.
- 두번째, Boolean 객체타입 null을 반환한다.
- 세번째, null은 ‘A’로 시작하지 않으므로 false를 리턴한다.
- 이를 코틀린 문법으로 작성하면 다음과 같다.
fun startsWithA1(str: String?): Boolean {
if (str == null) {
throw IllegalArgumentException("Null이 들어왔습니다")
}
return str.startsWith("A")
}
fun startsWithA2(str: String?): Boolean? { //두번째 메소드는 null이 리턴될 수 있다.
if (str == null) {
return null
}
return str.startsWith("A")
}
fun startsWithA3(str: String?): Boolean {
if (str == null) {
return false
}
return str.startsWith("A")
}
- 만약 null이 아예 불가능하다고 검증이 된 경우에는 이렇게 작성할 수 있다.
fun startsWithA(str: String): Boolean {
return str.startsWith("A")
}
Safe Call과 Elvis연산자
val str: String? = "ABC"
str.length //불가능
str?.length // 가능
- 코드의 두번째 라인은 str이 nullable한 타입이기에 컴파일이 불가능하다.
- 세번째 줄은 str이 null이 아니면 length를 실행하고, null이면 실행하지 않는다. 이를 통해 NullPointerException을 미연에 방지한다. (변수값이 null이라면 그냥 값 전체가 Null이 된다.)