[Kotlin] 스마트 캐스트

Jinny·2021년 1월 20일
2

Kotlin

목록 보기
4/9
post-thumbnail

🚩스마트 캐스트란?

만약 어떤 변수의 값이 실수일 때도 있고, 정수일 때도 있다면 어떻게 해야할까?
매번 자료형을 변경 하기는 조금은 불편할 수 있다.
이를 쉽게 도와주는 기능이 있다.

코틀린의 경우 'is'를 사용하여 변수의 타입을 검사한다.
자바의 'instanceof'와 비슷하게 볼 수 있지만, 'instanceof'는 타입을 검사 후 변수 타입을 캐스팅 해주어야 한다.

하지만 'is'는 타입 검사 후 컴파일러가 자동으로 형변환 (캐스팅)을 해준다. (대박쓰~)
이 기능을 스마트 캐스트 라고 한다.

🚩Number형

위의 예시처럼 저장되는 값에 따라서 자료형을 변환하려면 'Number'를 사용하면 된다.

var x: Number = 10.16 // x는 float형이 된다.
x = 12 // x를 Int형으로 스마트 캐스트
x= 80L // x를 Long형으로 스마트 캐스트

Number형인 x에 10.16을 저장하면서, x는 컴파일러에 의해 float형이 된다.
그 후, x에 담긴 값에 따라 자료형은 계속 변한다.

🚩Any형

코틀린에는 Int, Double, Float등 다양한 자료형이 있다.
이 자료형들을 포함, 어떠한 자료형이라도 될 수 있는 최상위 클래스 'Any'가 있다.
Any를 사용하여 변수를 선언한 후, 'is'를 사용하면 어떻게 될까?

var a:Any  //Any형 변수 a선언
a = "smartcast"
if(a is String) a="hello"  //a가 String형으로 스마트캐스트

a는 검사한 자료형으로 스마트 캐스트 되어진다.
즉, String형이 된다.

🚩as를 사용한 스마트캐스트

as를 사용하여 스마트캐스트를 할 수도 있다.
단, 주의할 점은 형변환이 되지 않으면 예외를 발생시킨다.

var x : String = y as String

y가 null이 아니라면 String으로 형변환이 되고, 이 값이 x에 대입된다.
y가 null이라면 예외를 발생시킨다.

따라서, 예외발생으로 인한 오류를 방지하기 위해선 지난 포스팅의 '?'를 사용해주어야 한다.

var x: String = y as? String

이렇게 '?'를 통해서 null일 가능성이 있는지를 검사한다.

지난포스팅

출처 : Do it! 코틀린 프로그래밍
profile
신입 개발자👩‍💻

0개의 댓글