본문 바로가기

kotlin

코틀린 독한 5일차 :: 자료형 비교하고 검사하기

코틀린 독학 5일차

벌써 코틀린 독학 5일차다..

9-6시까지 수업 듣고 코틀린 독학하는 건 좀 빡세긴 하지만

얼른 코틀린으로 프로젝트를 만들어보고 싶다

 

자료형 비교 & 검사 후 변환하기

코틀린에서 서로 다른 자료형은 연산과 비교가 되지 않는다.

예를 들면 

Int형과 Double형이 연산이 안되는 것과 같다

서로 다른 변수를 같은 자료형으로 만들어야 연산할 수 있기 때문에 

자료형을 변환하는 방법과

서로 다른 자료형의 변수를 비교하는 방법까지 알아보자

 

자료형 변환

<자바코드>

int a = 1; // int형 변수인 a에 1 할당

double b = a; // double형 변수인 b의 값으로 a 할당 

 

이렇게 되면 b 에는 1이 아닌 1.0 의 값이 할당된다.

 

이렇게 자바에서는 자동 형변환이 가능하지만,

코틀린에서는 자동 형변환이 되지 않기 때문에 

명시적으로 형변환을 시켜줘야 한다.

-

방법은 간단하다.

val b: Double = a.toDouble()

위 코드 처럼 .to변환할자료형 을 붙여 변환해주면 된다!

이중 & 삼중등호 비교 사용하기

단순히 값만 비교할 때는 이중등호

참조 주소까지 비교하려면 삼중 등호를 사용한다.

 

코드를 통해 자세히 알아보자

일단 a와 b는 참조형인 Int형으로 선언 되었지만

컴파일러에 의해 기본형으로 변환되어 저장되기 때문에

스택영역에 주소가 아닌 128이라는 값으로 저장된다.

그렇기 때문에 이중등호와 삼중등호 모두 true 가 나온다.

-

null을 허용한 변수 c와 d는 참조형으로 저장된다.

그렇기 떄문에 c와 d는 a에 들어있는 값(128)이 아닌 

128을 가르키고 있는 주소 A1, A2가 저장된다.

c와 d를 비교하면 값은 같기 때문에 이중등호 비교에선 true 이지만

주소는 다르기 때문에 삼중 등호 비교시에는 false가 된다.

-

null을 허용한 e는 다른 경우인데,

e에는 c의 참조주소인 A1이 저장되기 때문에 

값과 주소 모두 true가 된다.

코드를 실행시켜 값 확인을 해보자

정상적으로 출력됐음을 확인할 수 있다.

자료형 검사하기

변수의 자료형을 알아낼 때는 is 키워드를 사용하면 된다.

is는 왼쪽 항의 변수와 오른쪽 변수의 자료형과 같으면 true, 아닌 경우에는 false를 반환합니다.

그럼 is로 변수에 저장된 자료형이 무엇인지 

실습으로 알아보자

if-else문을 통해 num의 자료형을 알아보자 !

num 이 int형이면 num 을 출력하고,

num 이 int형이 아니라면 "Not a Int"를 출력하는 코드다.

! 기호는 부정을 나타내는 코드이다.

-

num은 Int형이 맞기 때문에 실행 시키면 256이 출력된다.

성공적으로 출력된 걸 확인할 수 있다.

 

묵시적 변환

Any형이란 코틀린의 최상위 기본 클래스로 

어떤 자료형이라도 될 수 있는 특수한 자료형이다.

-

Any 형은 자료형이 특별히 정해지지 않은 자료형으로

Int 나 String 모두 any형의 자식 클래스이다.

그럼 이 any형은 무엇이든 될 수 있기 때문에 

언제든 필요한 자료형으로 자동변환 할 수 있다.

이것을 묵시적 변환이라고 한다.

any형으로 자료형을 변환하는 것을

코드로 살펴보자 !

 

a는 Int형이었으나 20L에 의해 Long형으로 변환됨.

print문으로 출력해보면 

long형으로 변환된 것을 알 수 있다 

javaClass는 어떤 기본형을 가지고 있는지 출력하는 키워드이다.

출력된 것을 확인할 수 있다.

Any형으로 인자를 받는 함수 만들기

코드를 먼저 확인 한 후 자세하게 알아보자

checkArg 에 각각 문자열과 숫자를 인자로 넣은 후 

x를 any형으로 선언해주었다.

아까 말했듯이 any형은 어떤 형으로 변환될 수 있기 때문에

if문을 통해 x가 String이면 문자열을 

Int면 숫자를 출력하라는 코드를 생성했다

코드를 실행하면 위와같은 결과가 나오는 것을 확인할 수 있다 !!

 

-