1. Null
- 0과는 다른 값
- Null을 대상으로는 연산을 할 수 없음 (비교 연산은 가능!)
- 존재하지 않는 값
- NullSafety : Null로 부터 안전해지자 (코틀린 특징 중 하나)
- Null을 사용하는 방법
- val/var 변수명 : 자료형? = null
- val num: Int? = null -> null 가능
- val num: Int = 10 -> null 불가능 (null을 넣어주면 에러 발생)
val number: Int? = null
// nullable하다
println(number)
// null
- 일반 Int 타입과 Int? 타입은 Int형 연산 시 차이가 있음. 아래와 같은 코드는 정상 작동함
val num1: Int = 2 + 4
val num2: Int = 10
val num3: Int = num1 + num2
println(num3)
// 출력 : 16
- 하지만 nullable 타입은 null일 수 있기 때문에 정수형 변수를 담지만 정수형 연산을 할 수 없음.
val num1: Int? = 2 + 4
val num2: Int? = 10
val num3: Int? = num1 + num2
println(num3)
// 에러 발생
// : error: operator call corresponds to a dot-qualified call 'num1.plus(num2)' which is not allowed on a nullable receiver 'num1'.
// val num3: Int? = num1 + num2
^
// : error: type mismatch: inferred type is Int? but Int was expected
// val num3: Int? = num1 + num2
^
- 여기서 '!!' 를 사용하면 null이 아니라고 보장할 수 있음
val num1: Int? = 2 + 4
val num2: Int? = 10
val num3: Int? = num1!! + num2!!
println(num3)
// 출력 : 16
- 하지만 null이 들어갈 경우 NullPointer Exception 발생한다. 따라서 !!는 사용하지 않는 것이 안전함
val num1: Int? = null
val num2: Int? = 10
val num3: Int? = num1!! + num2!!
println(num3)
// Error발생
// java.lang.NullPointerException
if(null == null) {
println("같음")
} else {
println("다름")
}
// 출력 : 같음