kotlin

코틀린 : null 안전성

ChloeLee 2020. 10. 21. 20:20

코틀린 : 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