Archives
Recent Posts
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[17일차 Kotlin] Null 안전성을 위한 형변환(Null Casting) 본문

Computer/Kotlin

[17일차 Kotlin] Null 안전성을 위한 형변환(Null Casting)

Wise-99 2023. 5. 20. 02:53

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 Null 타입의 형변환

  • null 값이 담긴 객체에 대해 보다 안전한 형 변환 방법을 제공하고 있다.
  • null 을 허용하는 변수가 null 값이 들어있지 않다는 것을 보장해 주면 null 을 허용하지 않는 타입으로 스마트 캐스팅이 발생한다.

if문 사용

  • if 문을 통해 null 허용 변수에 null 값이 아닌 객체의 주소 값이 들어 있음을 검사해 주면 if 문 내부에서는 null을 허용하지 않는 변수로 변환되어 사용할 수 있다.
  • if 문이 종료되면 다시 null 허용 변수가 된다.
  • 이 때 비교 연산자 보다는 is 연산자를 추천한다.
  • 비교 연산자로 검사할 경우 타입이 Any 인 경우 컴파일 오류가 발생한다.

 

 

 

📖 예제 코드

fun main() {
    testMethod1("안녕하세요")
    testMethod1(null)
}

fun testMethod1(str:String?){

    println(str!!.length)    <<< 오류 발생
    
    println(str?.length)

    if(str is String){
        println(str.length)
    }

    if(str != null){
        println(str.length)
    }
}

✔️ 코드 해석

  • println(str!!.length)
    • !! 연산자는 null 을 허용하지 않는 변수로 변화하는 작업을 수행한다.
    • 따라서 null 이 들어있다면 오류가 발생한다.
  • println(str?.length)
    • ? 연산자는 참조변수에 null 이 들어가 있을 경우 프로퍼티를 사용하면 null 이 반환되고 메서드를 호출하면 메서드 호출을 무시한다.
    • 해당 코드에서는 null을 전달했을 때 null이 반환된다.
  • if(str is String){ ... }
    • 스마트 캐스팅(null 을 허용하지 않는 String 타입)
    • ? 와 동일하게 참조변수에 null 이 들어가 있는 경우 프로퍼티를 사용하면 null 이 반환되고 메서드를 호출하면 메서드 호출을 무시한다.
    • 해당 코드는 if문에서 null인지 확인하므로 null을 전달했을 때는 아무 것도 출력되지 않는다.
  • if(str != null){ ... }
    • 참조변수에 null 이 들어가 있으면 if 문이 거짓이기 때문에 아무것도 수행하지 않는다.
    • 허나 null이 아닌 객체의 id가 들어가 있다면 null을 허용하지 않는 변수로 스마트 캐스팅이 발생한다.