[kotlin] 널(null) 처리 [?: , ?. , as? , !! , lateinit]

chanto11

·

2019. 12. 23. 20:45

kotlin의 널(null) 처리

val nullableString : String? = null
val nonNullString : Strung = "Hello kotlin"

kotlin은 기본적으로 null을 허용하지 않습니다. null을 사용하려면 타입 뒤에 ?를 붙여야 됩니다.

 

이 외에도 ?: , ?. , as? 연산자와 !! , lateinit 대해 간략하게 알아 봅시다.

?: 연산자 (엘비스 연산자)

null을 대신할 값을 대입하거나 null이 아니라면 반환된 값또는 원래의 값을 대입합니다.

hello ?: kotlin		// hello가 null이 아니면 hello를 대입, null이면 kotlin을 대입 

// myText()가 null이면 null을 대입, null이 아니면 myText()가 반환한 String값을 대입
val Test : String = myText("hello") ?: null

 ?. 연산자 (안전한 호출)

?. (안전한 호출 연산자)를 사용하여 널(null) 값 확인과 값 접근 및 함수호출을 한번에 할 수 있습니다.

val result = hello?.kotlin 		//hello가 null이 아닌 경우에만 kotlin값을 대입 null이면 null대입

hello?.myapp()				//hello가 null이 아닌 경우에만 myapp() 호출

as? 연산자 (안전한 자료형 변환)

지원하지 않는 자료형으로 변환을 시도하는 경우 예외가 발생합니다.

val hello : String = "Hello"

val kotlin : Int = hello as Int 		// String은 Int로 변환할 수 없습니다.

val kotlin : Int? = hello as? Int		// 자료형 변환 오류로 널(null)이 대입

!! 널(null)이 아닌 값 보증

널(null)값을 포함하지 않는 타입으로 변환하여 사용 즉 널(null)이 아님을 보증하려면 !!을 사용한다.

val nullableString : String? = "hello kotlin"	// null허용타입

val nonNullString : String = nullableString!!	// !!으로 null허용타입 -> null불가타입

nullableString!!.myapp()		// !!으로 null허용타입 -> null불가타입 변환하면서 myapp()호출 

val myString = nullableString!!.mystr	// !!으로 null허용타입 -> null불가타입 변환 후 mystr 접근

!!(널이 아님을 보증)에 실제 null이 들어있을 경우 예외 처리함으로 주의해서 사용

 

lateinit 키워드 (나중에 초기화 해)

kotlin은 널(null)을 허용하지 않는 타입의 경우 초기화해주거나 생성자를 통해 초기화를 강제로 하고있다. 하지만

lateinit 키워드를 사용하면 초기화를 없이 변수만 선언할 수 있습니다. 그러나 초기화작업을 꼭 할 수 있도록 해야한다.

class MyActivity : Activity() {
	lateinit var late : Late	// 나중에 초기화를 꼭 하도록 주의
    ...
}