1) NPE
자바에서 가장 자주 접하는 이슈는 NPE (Null Point Exception)
자바에서는 컴파일 단계에서 null을 체킹할 수 없음 나중에 할당되는 값이 있기 때문
실제로 앱을 실행하고 누르다 보면 런타임에서 익셉션이 발생하는 것을 발견할 수 있음
에러 찾기 힘들고 많은 이슈를 만들 수 있음
코틀린은 랭귀지 단계에서 null이 될 수 있는지 없는지를 결정함으로써 안정성 확보
2) Elvis (엘비스) 연산자 (?)
변수의 type 뒤에 물음표(?)를 붙이면 그 변수는 null 값을 가질 수 있다.
fun main() {
// 물음표를 붙이지 않으면, null 값을 가질 수 없음
var name : String = "주연"
var number : Int = 10
// type 뒤에 물음표(?)를 붙이면
// null 값을 가질 수 있는 변수가 됨
var nickname : String? = null
var secondNumber : Int? = null
}
3) null 예외처리
기존에는 “null 예외처리” 를 아래와 같이 조건문으로 처리했지만
val result = if (nickname == null){
"값이 없음"
} else {
nickname
}
print(result)
코틀린에서는 엘비스 연산자를 이용하여 아래와 같이 코딩한다.
fun main() {
// 엘비스 오퍼레이터
// 값이 null 이면, 오른쪽 값을 가져라
var nickname :String? = null
val result = nickname?: "값이 없음"
print(result)
}
길었던 코드를 “엘비스 오퍼레이터”로 간결하게 처리 가능
4) ? 와 !!
fun main() {
// 엘비스 오퍼레이터
var nickname :String? = null
val size = nickname?.length // 물음표가 없다면, 컴파일 에러 발생
// nickname이 nulll이면, 더 이상 진행히자 읺고 null 을 내뱉는다.
// 만약 nickname이 null이 아니면, length를 호출함
println(size)
}
만약, nickname은 nullable ( null 값을 가질 수 있음 ) 이고
nickname의 길이인 size는 절대 nullable 할 수 없다면?
널 안정성을 보장하는 연산자를 사용하지 않았을 때 발생하는 에러를 살펴보면, ? 또는 !! 를 추천한다.
!! 를 사용하면, null 값을 가질 수 없는 변수의 속성을 가져올 수 있도록 하는데, 되도록이면 ( !! ) 를 사용하지 않고, type 선언 시, null 에 대하여 safe 하도록 선언하는 것을 권장함
fun main() {
// 엘비스 오퍼레이터
var nickname :String? = null
val size = nickname!!.length
// type을 선언할 때, null에 safe하도록 선언하고
// 되도록이면 (!!) 을 사용하지 않는 것을 권장
println(size)
}
'안드로이드 앱(Kotlin|Java) > [2025~] 안드로이드 앱' 카테고리의 다른 글
Part0_Ch01_10 String Template (0) | 2025.01.24 |
---|---|
Part0_Ch01_09 타입체크와 캐스팅 (0) | 2025.01.24 |
Part0_Ch01_07 컬렉션 ( list, map, set ) (0) | 2025.01.24 |
Part0_Ch01_06 반복문 (0) | 2025.01.24 |
Part0_Ch01_05 조건식 (0) | 2025.01.24 |