티스토리 뷰
Null Safety
• 코틀린이 가지고 있는 언어적 특징
• Null을 처리하기 위한 코틀린의 문법
1. 자료형
• non-null -> Int
• nullable -> Int?
2. !!
• null이 아님을 보장
• but 코틀린이 확실하게 null이 아님을 판단하는 것이 아닌, 개발자가 코틀린에게 null이 아니니깐 넘어가~하고 보장하는 느낌.
• 실제로 개발자가 예측 못 한 null이 나올 수 있다.
• 되도록 사용 X -> 정말 필요할 때, 정말 확실할 때만 사용.
3. ?. (safe call)
• 원래 AAA 객체의 BBB라는 메소드를 실행하기 위해서는 AAA.BBB를 해야 한다.
- AAA가 null일 경우 null 내부를 접근하려고 하여 오류가 발생한다.
- 이런 경우 안전하게 메소드를 호출할 수 있는 safe call 사용.
• AAA?.BBB
- 객체 AAA가 null이 아닌 경우 메소드 BBB를 실행
- AAA가 null이면 BBB를 실행하지 않고 null을 리턴
-> 즉, AAA가 null이 아닌 경우에만 BBB 실행을 보장한다.
val TEXT_HI: String? = "Hi"
val TEXT_NULL: String? = null
//println(text.length) // 오류 발생 : TEXT_HI가 null이 아님을 보장해야 한다.
println(TEXT_HI?.length) // 2 출력 : TEXT_HI가 String이므로 length인 2 출력
println(TEXT_NULL?.length) // null 출력 : TEXT_NULL이 null이므로 null 출력
4. as? (safe casting)
• as만 사용하는 경우에는 캐스팅이 실패하면 예외가 발생한다.
• as?를 사용하면, 캐스팅이 실패한 경우 null을 리턴한다.
5. ?: (Elvis Operation, 엘비스 연산)
• A ?: B
• A가 null이 아니면 A를 리턴, A가 null이면 B를 리턴
• if 조건식보다 길이가 훨씬 짧다.
println(TEXT_HI?.length ?: -1) // 2 출력 : TEXT_HI?.length가 2이므로 2 출력
println(TEXT_NULL?.length ?: -1) // -1 출력 : TEXT_NULL?.length가 null이므로 -1 출력
println(if (TEXT_HI?.length != null) TEXT_HI.length else -1) // 2 출력 : if문을 사용하면 결과는 같지만 코드가 훨씬 길다.
println(if (TEXT_NULL?.length != null) TEXT_NULL.length else -1) // null 출력 : if문을 사용하면 결과는 같지만 코드가 훨씬 길다.
이 글은
패스트 캠퍼스 Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online
강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.
'📱 Android > 💻 Kotlin' 카테고리의 다른 글
[Android/Kotlin] 21. 익명 클래스(Anonymous Class) (0) | 2022.10.24 |
---|---|
[Android/Kotlin] 20. 인터페이스(Interface) (0) | 2022.10.13 |
[Android/Kotlin] 18. 형변환 (0) | 2022.10.13 |
[Android/Kotlin] 17. 상속 (0) | 2022.10.12 |
[Android/Kotlin] 16. 접근 제한자 (0) | 2022.10.12 |