Kotlin Study

Kotlin , null 처리 방법

85chong 2021. 7. 5. 17:52
728x90
반응형
SMALL

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를 출력하지 않는다.