Nullable, Non-Null
저번 시간에서는 자료형에 대해 알아보았습니다.
자료형에는 빈 값이 들어갈 수가 있으며 이를 null이라고 칭합니다.
Java에서는 null이 들어가면서 발생하는 오류(예외)를 NullPointerException이라고 합니다. 반면 Kotlin에서는 따로 정해진 null 예외처리가 없으며 기본적으로 변수에는 null 값이 들어갈 수 없습니다.
Nullable
그럼 Kotlin에서 변수에 Null 값을 넣으려면 어떤 방법을 써야 하는지 알아봅시다.
시작하기 앞써 NullSafety 이름을 가진 Kotlin 파일을 만들어주고 진행하겠습니다.
fun main() {
var text: String = "문자열"
text = null
}
지난 시간에 잠깐 나온 String 자료형을 써보았습니다. (자료형은 생략이 가능합니다. 여기서는 강좌 진행을 위해 사용하였습니다.)
Char은 'A', 'B'와 같이 글자 한 개를 담을 수 있다면, String은 위 코드와 같이 여러 글자를 담을 수 있습니다.
위 코드를 실행하면 오류가 뜨거나 IDE에서 오류가 표시되는 모습을 볼 수 있습니다.
Null can not be a value of a non-null type String
Kotlin은 기본 적으로 변수에 null 값을 넣을 수 없기 때문에 나오는 오류입니다.
변수에 null을 넣기 위해 ?(물음표) 문자를 사용해보겠습니다.
위에서 작성한 오류나는 코드에서 자료형 부분을 고쳐보겠습니다.
fun main() {
var text: String? = "문자열"
text = null
}
String 뒤에 ?(물음표)를 붙이니 오류가 없어집니다.
? 는 변수에 null을 넣을 수 있다(Nullable)라는 것을 의미합니다.
앞으로는 변수에 null을 넣을 수 있다는 의미로 Nullable이라는 단어를 사용하겠습니다.
안전하게 Null 사용하기
위에서 사용한 코드를 확장해서 아래와 같이 써봅시다.
fun main() {
var text: String? = "문자열"
text = null
val text2: String = "Null이 아님"
print("${text.length}\n")
print("${text2.length}\n")
}
변수이름(String자료형).length는 문자열에 길이를 나타냅니다.
위 코드에서 text2 문자열은 띄어쓰기 포함 8글자이므로 text2.length 는 8을(를) 나타냅니다.
해당 상태에서 실행을 하게 되면 text.length 부분에서 Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String? 이러한 오류를 볼 수 있습니다.
변수를 Nullable 상태로 만들어줬기 때문에 해당 변수를 사용하는 코드 또한 null 값이 올 수 있음을 알려줘야 합니다.
fun main() {
var text: String? = "문자열"
text = null
val text2: String = "Null이 아님"
print("${text?.length}\n")
print("${text2.length}\n")
}
// 실행결과
// null
// 8
null 값이 올 수 있음을 알려주기 위해서는 변수에 사용해줬던 것처럼?(물음표)를 사용해주면 됩니다.
위 코드를 실행하면 정상적으로 작동하는 것을 볼 수 있습니다.
Null이 들어간 변수를 출력하면 항상 Null만 나올까?
이번에는 변수명? 사용 시 null일 경우 다른 문자가 출력되게 해봅시다.
var l = text?.length ?: "Null입니다!"
print("$l\n")
// 실행결과
// Null입니다!
코드 뒤에 ?: <null 상태일 시 출력하는 문구>를 사용해주면 됩니다.
<> 안에는 문자(열), 숫자, 논리형 모두 가능합니다.
값이 Null이라면 오류(예외)를 나오게 하자
변수가 null이라면 null를 출력하는 것이 아닌 오류를 발생하여 프로그래머에게 알려줄 수도 있습니다.
이 역시 간단하게 사용할 수 있습니다.
fun main() {
var text: String? = "문자열"
text = null
val text2: String = "Null이 아님"
print("${text!!.length}\n")
print("${text2.length}\n")
}
// 실행결과
// Exception in thread "main" kotlin.KotlinNullPointerException
?(물음표)가 아닌 !!(느낌표 두 개)를 사용해주면 됩니다.
!!를 사용해주면 변수가 null일 시 KotlinNullPointerException 오류(예외)를 발생시킵니다.
Non-Null
변수에는 기본으로 null이 들어올 수 없으니 따로 만져주지 않는다면 해당 변수는 Non-Null입니다.
마무리
이번 강좌에서는 Null에 관하여 알아보았습니다.
오타 발견 또는 피드백은 댓글로 남겨주세요.
감사합니다 :)
'개발' 카테고리의 다른 글
코틀린 Kotlin 다루기 (5) - 함수 (Function) (0) | 2019.06.09 |
---|---|
코틀린 Kotlin 다루기 (4) - 연산자 (Operators) (0) | 2019.05.29 |
코틀린 Kotlin 다루기 (2) - 변수 (Variable), 자료형 (Data type) (0) | 2019.05.19 |
코틀린 Kotlin 다루기 (1) - Kotlin 사용 환경 구축하기 (0) | 2019.05.18 |
AirQualityTool 디자인 재작업 (0) | 2019.02.03 |