본 글은 자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
을 보고 정리한 글입니다.
기존의 스프링 프로젝트를 진행하면서, null과 예외 처리를 할때 반복되거나 긴 코드를 사용하여 공간을 낭비하는 경우가 많았다.
Safe Call과 Elvis 연산자를 통해 간단히 null을 처리해보자.😊
public boolean Start(String str) {
return str.startsWith("A")
}
들어가기 앞서, 이 함수는 안전하지 않다. String은 Refernce type 이기 때문에 null을 수용할수 있고, str에 null이 들어오면 NPE가 나게 되기 때문이다.
다음 3가지 함수를 이용하여 NULL을 JAVA에서는 처리 가능하다.
- str이 null일 경우 Exception을 내기 (반환 타입은 boolean)
- str이 null일 경우 null을 반환하기 (반환 타입은 Boolean)
- str이 null일 경우 false를 반환하기 (반환 타입은 boolean)
일단 코틀린에서는 null이 가능한 타입을 완전히 다르게 취급한다.😊
fun startsWithA(str: String): Boolean {
return str.startsWith("A")
}
str 뒤에 물음표(?) 연산자가 없어, null이 들어오지 않음을 보장해주므로, startsWith라는 함수를 불러올 수 있다.
fun startsWithA(str?: String): Boolean {
return str.startsWith("A")
}
하지만 위 함수는 불가능하다. str 뒤에 물음표(?) 연산자가 있어, str이 null이 들어올 수 있으므로, startsWith 함수를 바로 불러올수 없다!
null이 가능한 타입만을 위한 기능은 2가지가 있다.
null이 아니면 실행하고, null이면 실행하지 않는다 (그대로 null)
val str: String? = "ABC"
str.length // 불가능
str?.length // 가능!
str이 null이면 str?.length는 null이 반환된다!
앞의 연산 결과가 null이면 뒤의 값을 사용
val str: String? = "ABC"
str?.length ?: 0
str이 null이면, 0을 반환해주는 연산자.
두 Safe Call과 Elvis 연산자를 활용해 예외처리를 해보자.
fun startsWithA1(str: String?): Boolean {
if (str == null) {
throw IllegalArgumentException("null이 들어왔습니다.")
}
return str.startsWith("A")
}
변경 후 함수
fun startsWithA1S(str: String?): Boolean {
return str?.startsWith("A")
?: throw IllegalArgumentException("null이 들어왔습니다.")
}
Safe Call과 Elvis 연산자를 활용하여 str이 null일 경우 IllegalArgumentException을 반환한다.
fun startsWithA2(str: String?): Boolean? {
if(str == null){
return null
}
return str.startsWith("A")
}
변경 후 함수
fun startsWithA2S(str: String?): Boolean? {
return str?.startsWith("A")
}
Safe Call을 활용하여 str이 null일 경우 null을 반환한다. null을 가질 수 있도록 Boolean?을 이용함.
fun startsWithA3(str: String?): Boolean {
if (str == null) {
return false
}
return str.startsWith("A")
}
변경 후 함수
fun startsWithA3S(str: String?): Boolean {
return str?.startsWith("A") ?: false
}
Safe Call을 활용하여 str이 null일 경우 false 반환한다.
프로젝트를 진행하면서, 초기 필드가 nullable 하지만, 업데이트를 거쳐 null값이 무조건 아닌 필드가 있을 수 있다. 이 경우도 코틀린에서 처리 가능하다.
fun startsWithNotNull(str: String?): Boolean {
return str!!.startsWith("A")
}
!! 연산자를 이용해, null이 아님을 보장한다.
느낀점
코틀린으로 간단한 토이 프로젝트를 진행할때, 예외 처리를 할경우 Elvis랑 safe call을 이용하자!😊