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)

}

+ Recent posts