카테고리 없음

kotlin 코틀린 null 컴파일 에러 해결방법 (null, nullable) - elvis ? : , !!

slowbooktech 2022. 5. 16. 13:05

1. 자료형

nullable 타입이 아닌 변수들에 null을 넣을 수 없다.

가령, 문자열로 선언한 변수 name에 null을 넣으면 컴파일 오류가 난다.

 

ㅣ 가능한 코드

fun main(){
	var nullableSentence : String? = " "
    	nullableSentence = null
}

ㅣ불가능한 코드

fun main(){
	var sentence : String = " "
 	   sentence = null
}

 

2. 내장함수

nullable인 경우 .length, .toLowerCase( )와 같은 함수를 쓸 수 없다.

가령, nullable인 변수 nullableSentence의 길이를 .length로 받으면 컴파일 오류가 난다.

 

ㅣ불가능한 코드

fun main(){
	var nullableSentence : String? = "NANANA"
	nullableSentence.length
	nullableSentence.toLowerCase()
}

ㅣ 가능한 코드

fun main () {
	var sentence = "NANANA"
    	sentence.length
   	sentence.toUpperCase()
}

이때 println ( ) 이나 print  ( ) 로 출력하면 nullableSentence는 길이 6, nanana 로 출력되고 sentence는 컴파일 에러가 난다.

 

3. nullable 변수

nullable 에서 길이 확인, 대소문자 바꾸는 기능 사용하려면 다음과 같은 방법이 있다. 

 

1) nullable 변수 != null 로 if, else 사용하기

 

2) null이 아닌 경우 실행할 코드에 if, else 대신 ?.let { 실행할 코드 }

fun main ( ) {

	var sentence : String? = "here is non-null"
    	sentence?.let{println( sentence.toUpperCase() )}
}

 HERE IS NON_NULL 이 출력된다.

fun main ( ) {

	var sentence : String? = "here is non-null"
    	sentence?.let{println( sentence.toUpperCase() )}
}

아무것도 출력되지 않는다.

 

3) 사용하고자하는 기능 앞에 다시 ? 붙여주기.

가령, nullable로 선언된 nullableSentence는 ?.length() 로 길이를 알 수 있다.

 

ㅣ가능한 코드

fun main () {
	var nullableSentence : String? = null
   	nullableSentence?.length
}

출력하면 null이 출력된다.

 

4. ? : 

?: 는 null이 아닌 값은 그대로 쓰고 null이면 : 의 우측 값을 넣는다.

가령, null인 nullSentence 에 ?: "notnull"을 하면 notnull이 출력된다.

fun main () {
	var nullSentence : String? = null
    	var printedSentence = nullSentence ?: "It was in a null state"
    	println { printedSentence } 
}

null일수도, 아닐수도 있었던 nullable type 변수인 nullSentence에 null이 들어갔고, printedSentence는 null인경우 :의 우측 값을 넣으므로 이를 출력하면 It was in a null state 가 출력된다.

 

5. !!

!!는 null 이 아님을 강조하는 것이며, 앞으로도 이전에도 계속 확실하게 null이 아닌 경우 사용할 수 있다. nullable 변수였음에도 !!를 통해 null 아닌 값만 들어간다는 것을 알았으므로 만일 해당 변수에 null이 들어가면 npe (null pointer exception) 이 발생하고 프로그램이 종료되면서 null이 할당되었다는 것을 알린다.