Hello, Android!

스마트 캐스트, 자료형 검사 본문

Kotlin

스마트 캐스트, 자료형 검사

lwndnjs93 2020. 2. 22. 18:04

스마트 캐스트는 어떤 값이 정수가 들어올 수도 있고 실수가 들어올 수도 있을때 

컴파일러가 자동으로 타입 캐스팅을 해주는 기능을 말한다

스마트 캐스트가 적용되는 자료형은 Number이 있다

Int를 할당한 num2에 정수가 아닌 1.2를 대입하려고 하니 에러가 났다

하지만 Number로 할당을 한 num4, num5에 각각 1.2와 long타입 200을 넣었는데

스마트 캐스트를 통해 아무런 문제없이 할당되었다

 

스마트 캐스트가 적용되는 또 다른 예를 알아보겠다

string은 null을 허용하는 문자열 변수이기 때문에 세이프콜 또는 non-null이 아닌 12번 줄에서는 에러가 났다

하지만 16번 줄의 print함수 안에서는 세이프콜, non-null도 없지만 아무런 문제가 없다

이는 if 조건에서 string 변수가 null이 아니라는것을 검증하기 때문에 

if문 내에서는 일시적으로 null이 허용되지 않는 변수로 스마트 캐스팅이 되는 것이다

이는 if문을 벗어나면 string은 다시 null을 허용하는 변수가 되어버린다

 

as를 이용한 스마트 캐스팅

as를 이용하여 원하는 타입으로 스마트 캐스팅을 하는 방법도 있다

위와 같이 할당하고자 하는 값 뒤에 as 와 캐스팅할 타입을 명시하면 된다

(하지만 이는 스마트 캐스팅이라기 보다는 .to 함수 대신에 사용하는 기분이 강하게 든다)

as는 타입 캐스팅이 불가능 하면 예외를 발생시킨다 

그 말은 위의 경우 12를 String으로 캐스팅이 가능하면 캐스팅 한 결과를 넘겨주게 되지만

불가능한 경우 null을 넘겨준다

이를 대비하기 위해서는 13번 줄 처럼 ? 를 통해 null을 허용하도록 해야한다

 

- 자료형 검사

코틀린에서 변수의 타입을 확인할 때 is 를 사용한다

is로 타입을 비교했을때 참이면 true가 거짓이면 false가 넘어오게 된다

첫번째 if문에서는 그냥 is만 사용하였기 때문에 tmp가 Int라면 이라는 의미가 되고

두번째 if문에서는 is앞에 !가 붙어 부정을 했으니 tmp3가 Double이 아니면 이라는 의미가 된다

'Kotlin' 카테고리의 다른 글

코틀린의 연산자  (0) 2020.02.23
코틀린의 Any  (0) 2020.02.22
코틀린의null  (0) 2020.02.19
문자열 String  (0) 2020.02.18
import와 확장함수  (0) 2018.11.26