null 은 var 나 val 변수의 값이 없다는 것을 나타내는 특별한 값이다. 자바를 포함해서 많은 프로그래밍 언어에서 null 은 흔히 크래시(crash)를 유발하는 원인이 된다.
코틀린은 컴파일 언어다. 즉 실행에 앞서 컴파일러라는 특별한 프로그램에 의해 기계어로 변환된다는 걸 뜻한다.
컴파일러는 null 가능 타입에 null 값이 지정되는지 검사한다.
런타임 에러는 컴파일러가 발견할 수 없어서 프로그램이 컴파일된 후 실행 중에 발생하는 오류다.
자바는 null 가능 타입과 불가능 타입을 구분하지 않으므로 자바 컴파일러는 null 값으로 인한 문제가 있는지 사전에 알려줄 수가 없다. 따라서 정상적으로 컴파일 된 코드가 런타임 시에 크래시될 수 있다.
null 가능 타입이 컴파일이나 런타임 에러 없이 항상 실행되도록 해야 할 경우가 있다.
이런 경우에 null 가능 타입을 안전하게 처리하기 위해 안전 호출 연산자(safe call operator)인 ?.을 사용한다.
non-null 단언 연산자(assertion operator)인 !!도 null 가능 타입에 대해 함수를 호출하기 위해 사용할 수 있다.
non-null 단언 연산자는 컴파일러가 null 발생을 미리 알 수 없는 상황이 생길 수 있을 때 사용된다.
nul 가능 변수에 !! 연산자를 사용하는 것은 위험하다.
예기치 않는 값으로 인해 우리가 의도치 않는 방향으로 프로그램이 실행될 수 있다. 따라서 코드 값을 작성할 때는 입력 값을 검사하는데 많은 노력을 기울여야 한다.
null 불가능 매개변수가 null 인자를 받지 않게 해주는 매커니즘에는 @NotNull 애노테이션이 있다.
@NotNull 애노테이션은 많은 자바 프로젝트 코드에서만 볼 수 있지만, 코틀린에서 자바 메서드를 호출할 때 특히 유용하다.
출처 : 빅너드랜치의 코틀린 프로그래밍에서 발췌 요약
'안드로이드 > Kotlin 문법' 카테고리의 다른 글
[코틀린] Nested Class (중첩 클래스) (0) | 2020.08.21 |
---|---|
코틀린 클래스 (0) | 2020.05.06 |
코틀린 object (0) | 2020.01.19 |
코틀린 data class (자바의 getter 와 setter 클래스) (0) | 2020.01.16 |
코틀린 고차함수와 람다 그리고 확장함수 (0) | 2020.01.14 |