Nullable types and non-null types
코틀린은 null 참조 위험에 대비한다
예를 들어, Java언어의 경우에는 null 참조가 NullPointerException(NPE)를 불러일으킨다
1. Regular variable
기본적인 변수 선언 방식
var a : String = "abc" //non-null 하게 초기화 된 변수
a = null //이러한 경우 컴파일 에러가 발생함
//////////
var b: String ? = "abc" // it can be set to null
b= null //ok
print(b)
//null이 출력됨
//////////
val l = a.length //a는 non-null하므로 가능
val l = b.length //b는 null 하므로 컴파일 에러 발생
2. Safe Calls
?. 연산자를 사용하여 null인지를 확인할 수 있다
/////////////
val a = "Kotlin"
val b: String? = null
println(b?.length)
println(a?.length)//불필요한 safe call -> a는 nullable하지 않기 때문에 ?.를 사용할 필요가 없음
////////////
person?.department?.head = managersPool.getManager()
//person또는 person.department가 null이면 해당 함수는 호출되지 않음
3. Elvis operator
nullable 한 참조를 해야하는 경우 -> b가 null일 때와 그렇지 않을때를 나눠서 정할 수 있음
///////
//원래 작성하던 방식
val l : Int = if(b!=null) b.length else -1
//elvis operator
val l = b?. length ?: -1
//b가 null인 경우 오른쪽 연산을(l= -1) not null인 경우 왼쪽연산 진행(l=b.length)
/////////
//함수 예시
fun foo(node: Node) : String ?{
val parent = node.getParent() ?: return null
val name= node.getName() ?: throw IllegalArgumentException("name expected")
}
4. The !! operator
!! 연산자를 사용해서 해당 값이 null인 경우 exception 발생
val l = b!!.length
//b가 null인 경우 exception을 throw함
5. Safe casts
regular cast를 하는 경우 ClassCastException을 발생시키는 경우가 있기 때문에 safe cast를 사용하여 cast를 실패할 경우 null을 반환하게 함
val aInt: Int?=a as? Int
6. Collections of a nullable type
val nullableList : List<Int?> = listOf(1,2,null,4)//null이 가능한 리스트
val intList : List<Int> = nullableList.filterNotNull()//nullableList에서 null만 빼고 받음
참조
'Language > Kotlin' 카테고리의 다른 글
[Kotlin 기초] (0) | 2022.09.04 |
---|