개발여행일지~
널 세이프티 (null safety) 본문
코틀린의 Null 안정성을 향상시켜줄 수 있다
- 설명
- Null예외는 프로그램의 가용성을 저하시키는 치명적인 오류다.
- 코틀린은 Null예외로부터 안전한 설계를 위해 자료형에 Null 여부를 명시할 수 있다.
- Kotlin의 널 세이프티 방법
- Null 예외로부터 안전한 설계를 위한 다양한 키워드들을 지원한다.
- 코틀린은 ?, !!, ?., ?: 로 Null예외로부터 살아남으려고 한다.
- 하지만 강제로 null이 아니라고하는 !!는 최대한 사용을 지양한다.
예시코드
주소를 저장하는 address변수는 null을 저장할 수 있다고 String?을 선언한다.
fun main(){
var s = Student()
s.name = "참새"
s.address = "서울"
s.displayInfo()
}
class Student {
lateinit var name:String
var address:String? = null
fun displayInfo() {
println("이름은: ${name} 입니다")
println("주소는: ${address} 입니다")
}
}
메소드를 호출하고 전달받은 리턴값이 null이 아님을 !!키워드로 보증한다.
readLine()의 결과값을 !!로 Null이 아님을 보장했다.
fun main(){
// var data = readLine()!!.toInt()
var inputData = readLine()!!
var data = inputData.toInt()
println("Null아닌 값: ${data}")
}
?.키워드로 Null인지 확인하고 Null이 아닐때만 참조하는 메소드를 실행하도록 작성한다.
- 주소를 저장하는 address는 초기값이 null이기때문에 null위협에 놓여있다
- Null이 아님을 보장해야하는데 강제로 !!를 사용하는것은 현상황에 바람직하지 않다.
- ?. 는 **안전 호출연산자(safe-calls)**라고 한다.
fun main(){
var s = Student()
s.name = "참새"
s.displayAddressLength()
s.address = "서울"
s.displayInfo()
}
class Student {
lateinit var name:String
var address:String? = null
fun displayInfo() {
println("이름은: ${name} 입니다")
println("주소는: ${address} 입니다")
}
fun displayAddressLength() {
println("주소의 길이는: ${address?.length} 입니다")
}
}
?. 키워드로 안전하게 실행했지만 null이 출력되는것을 막고싶다면?
- ?: 키워드를 함께 사용해서 null 대신에 다른 문자열을 출력할 수 있다.
- ?:를 엘비스 연산자라고 한다.
fun main(){
var s = Student()
s.name = "참새"
s.displayAddressLength()
s.address = "서울"
s.displayInfo()
}
class Student {
lateinit var name:String
var address:String? = null
fun displayInfo() {
println("이름은: ${name} 입니다")
println("주소는: ${address} 입니다")
}
fun displayAddressLength() {
println("주소의 길이는: ${address?.length ?: "초기화하세요"} 입니다")
}
}
'코틀린 공부정리' 카테고리의 다른 글
Extra를 이용해 데이터 옮기기! (0) | 2023.08.02 |
---|---|
(Error:AndroidStudio Error) imageview의 이미지가 안보이는 현상 (0) | 2023.08.01 |
지연초기화 (0) | 2023.07.24 |
예외 처리 (try-catch, throw의 구조) (0) | 2023.07.24 |
코틀린 4일차~! (메소드와 클래스, 생성자) (0) | 2023.07.20 |