코틀린 : null 안전성
코틀린 : null 안전성
1. 코틀린의 자료형은 null 허용 타입과 불허 타입으로 나눌 수 있음
null 허용 타입을 만들 때는 자료형 뒤에 ? 를 붙이면 됩니다.
null 허용 타입은 val 로 만들지를 않습니다.
val n1 : Int = 10
var n2 : Int = 10
val n3 : Int? = null // 문법상은 가능하지만 실제로는 하지 않는다
var n4 : Int? = null
n3 = 4 // 에러
2. null 허용 타입에 null 을 불허 타입의 데이터는 대입이 가능 하지만 null 불허 타입에 null 허용 타입의 데이터는 대입이 안됩니다.
var n1 : Int = 20
var n2 : Int? = 30
n2 = n1 // 정상 수행
n1 = n2 // 에러
3. ? 연산자
데이터? 작업 : 데이터가 null 이 아니면 뒤의 작업을 수행하지만 null 이면 null 을 리턴
//문자열의 길이를 리턴해주는 프로퍼티가 length 입니다.
val str1 : String = "Hello World"
println(str1.length) // 11 이 출력
val str2 : String ? = "Hi"
println(str2.length) // 2 가 출력
str2 = null
println(str2.length) // NullPointerException
if(str? != null){
println(str2.length)
}else {
println("널 일 때 수행할 내용")
}
var len:Int? = str2?.length // str2 null 이 아니면 length 를 대입하고 null 이면 null 을 대입
4. let{코드}
=> 호출하는 인스턴스가 null 이 아닐 때만 코드를 수행, 그렇지 않은 경우는 코드를 수행하지 않음
str2?.let{print(str2.length)}
5. ?: 연산자
null 일 때 리턴할 값을 설정 할 수 있는 연산자
str2?.length?:-1
str2?.length 가 null 일 때는 -1 을 리턴
6. !!
null 이면 예외를 발생 시키는 연산자
7. as
as 로 형변환을 수행 하면 데이터가 null 일 때 예외 발생
as? 로 형 변환을 수행하면 데이터가 null 일 때 null 을 리턴 합니다.
Int? 인데 Int로 변환 하고자 하면 Int? as? Int