Java 와는 다르게 Kotiln 에서는 null를 애초에 차단시키기 방안을 마련해주었다.
일단 Kotlin 은 테스트 한다고 변수에 null 넣는 행위 자체를 NPE 발생 시켜버리기 때문에 왠만해선 Kotlin 환경에서 null 을 사용하기 어렵다.
그래도 명시적으로 예외처리를 하는부분은 다르기 때문에, null 처리를 위한 방법은 아래와 같이 있다.
- 명칭 : null safe operator
- 코드 : ?.
- 코드예제 :
fun getDataSafe(value:String?){
val result:String? = value?.length?()
Log.d("testLog","result : ${result}")
}
- 설명 : value 가 null 일때, Java 같은 경우에는 null에 관계없이 length를 실행시켜 NPE가 발생하지만
위 코드에서는 value가 null 일때, length()를 실행시키지 않고 Log에 null을 출력한다.
- 명칭 : Elvis operator
- 코드 : ?:
- 코드예제 :
fun getDataElvis(value:String?){
val result = value?:"not exist Data"
Log.d("testLog","result : ${result}")
}
- 설명 : 위 코드에서는 value 가 null 일때 , 미리 default 값을 지정해서 출력하게 한다.
value가 null 일때, Log에는 not exist Data 가 출력된다.
- 명칭 : safe Cast
- 코드 : as?
- 코드예제 :
fun getDataElvis(value:Any?){
val result = value as? Person ?: return false
Log.d("testLog","result : ${result}")
}
- 설명 : 위 코드에서는 value 가 Person 자료형으로 변환을 시도할때, value가 Person 으로 변경 불가한 값이라면
null을 반환한다. 이때, 뒤에 Elvis operator를 사용하여 null 일경우에 false 로 처리하는 코드이다.
- 명칭 : Not null
- 코드 : !!
- 코드예제 :
fun getDataElvis(value:Any?){
val result = value!!
Log.d("testLog","result : ${result}")
}
- 설명 : 위 코드에서는 value 가 절대로 null 이 들어갈수 없다. 라는 코드이다.
단! 저상태에서 null 이 들어간다면, NPE가 발생한다.
- 명칭 : let Funtion
- 코드 : let
- 코드예제 :
fun getDataElvis(value:Any?){
val result = value.let{
it
}
Log.d("testLog","result : ${result}")
}
- 설명 : 위 코드에서는 value가 null일 경우 let 안에 있는 로직을 타지 않고 result 에 null이 들어가게 된다.
위의 it에서 바로 형변환도 가능하나, 위의 Any 같은경우에는 형변환전 타입을 체크하고 변환하는것이 좋을듯 하다.
- 명칭 : Null Extension Funtion(String 만 사용가능함)
- 코드 : .isNullOrBlank( )
- 코드예제 :
fun getDataElvis(value:String?){
if(value.isNullOrBlank()){
Log.d("testLog","value : ${value}")
}
}
- 설명 : 위 코드에서는 value가 null이거나 빈값일 경우 testLog를 출력하지 않는다.
'Kotlin Study' 카테고리의 다른 글
func return null 처리 (0) | 2023.09.01 |
---|---|
Kotlin Coroutine 기본 동작 방식 (0) | 2022.04.20 |
[각기 다른 google-services.json 설정파일의 FirebasePoject, 한 App 에서 사용하기] (0) | 2021.05.07 |
Android HashKey 구하기 (feat.Kotlin) (0) | 2021.03.19 |
코루틴 간단하게 바로 사용 할 수 있는방법 (0) | 2021.03.12 |