[Kotlin] Smart Cast

1 분 소요

🙋‍♀️Smart Cast?

  • 코틀린에서 컴파일러가 타입을 자동으로 변환해주는 것을 말한다.
    • 🙄 명시적으로 타입을 변환할 경우에는 as, as?를 사용한다.
      val tmp1: Int = b as Int
      
      • 변수 b를 Int 타입으로 변환해 a에 대입한다.

      • b가 Int 타입에 적합하지 않을 경우, ClassCastException 예외가 발생한다.

    • 🙄 as?를 사용하게 되면 b가 Int 타입에 적합하지 않을 경우, null이 a에 대입되게 된다.
      val tmp1: Int = b as? Int
      


  • 스마트 캐스트가 진행되는 경우
    • null 체크를 할 경우
    • is, !is 연산자로 타입 확인을 할 경우


👩null check

val str: String? = "안녕하세요!"
if(str != null) print(str.length) #6

🙄 위의 예제처럼 str 변수가 null인지 체크한 후, null이 아님이 확인되면 자동으로 str을 null이 불가능한 String 타입으로 변환해 준다. (스마트 캐스트)

  • str은 if문 안에서만 null이 불가능한 String 타입을 갖게 된다.


👩is, !is

  • is, !is도 null check와 마찬가지로 해당 타입일 경우, 스마트 캐스트가 일어난다.
fun main(){
  smartCast("안녕하세요!")
  smartCast(2521)
}

fun smartCast(e: Any){
  if (x is String) print(e.length) // x가 자동적으로 String으로 캐스팅된다.
  if (x is Int) print(e*10) // x가 자동적으로 Int로 캐스팅된다.
}
  • 코틀린의 모든 클래스는 Any 클래스를 상속받는다.
  • Any의 경우, null을 제외한 모든 타입의 값으로 지정할 수 있다.

🙄 위의 코드를 when을 이용하게 처리할 수 있다.

fun main(){
  smartCast("안녕하세요!")
  smartCast(2521)
}

fun smartCast(e: Any){
  when(e){
    is String -> print(e.length)
    is Int -> print(e*10)
  }
}


🙇‍♀️ 부족한 부분이 있다면 말씀해주세요! 감사합니다!

📃참고

댓글남기기