타입 변환 (Data Type Conversion)

Lee Yong Seok·2022년 4월 23일
0
post-thumbnail
post-custom-banner

타입 변환 (Data Type Conversion)

• 하나의 자료형을 다른 자료형으로 바꾸는 것을 말한다.
• 자바에서는 boolean 형을 제외한 나머지 기본 자료형간의 타입 변환을 수행할 수 있다.

자동 타입 변환(묵시적) : Promotion

• 작은 메모리 크기의 데이터 타입을 큰 메모리 크기의 데이터 타입으로 변환하는 것이다.
• 연산을 수행 시 컴파일러가 자동으로 타입 변환을 수행해준다.

byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)

강제 타입 변환(명시적) : Casting

• 사용자가 캐스트 연산자를 사용하여 강제적으로 타입 변환을 수행한다.
• 작은 메모리 크기의 데이터 타입 = (작은 메모리 크기의 데이터 타입) 큰 메모리 크기의 데이터 타입
• 데이터의 손실이 발생할 수 있다.

[타입 변환 예제1] 자동형변환

byte형는 int형보다 메모리 공간이 작으며, 메모리 공간이 작은 byte형 변수인 num1은 메모리 공간이 상대적으로 더 큰 
int형 변수인 num2에 값을 입력해도 무리없이 값이 들어가기때문에 자동형변환이 이루어진다.

[타입 변환 예제2] 강제형변환

메모리 공간이 더 큰 int형 변수인 num1는 상대적으로 더 작은 메모리 공간을 가진 byte형 변수인 num2에 값을 
저장할 수 없다. 저장을 하기 위해서는 int형을 byte형으로 강제형변환 시켜줘야 한다. 여기서 캐스트 연산자를
사용하는데, 상대적으로 더 큰 int형 변수 num1 앞에 변수 num2의 자료형인 byte형으로 (byte)캐스트연산자를 사용한다.

변수 num1의 타입이 byte형으로 강제 타입 변환을 했지만, 이 과정에서 데이터가 유실된다.
int형(4byte)에서 byte형(1byte)로 메모리 공간이 줄어들었기 때문에 3바이트 만큼의 데이터가 유실된 것이다.

[타입 변환 예제3] int형보다 작은 기본자료형의 산술연산 결과는 int형이다.

위 그림에서 에러가 나는 이유는 int형보다 메모리 공간이 작은 기본 자료형끼리 연산을 했을 때, int형으로 결과값이 
나오는데 그걸 받아주는 result 변수의 자료형이 byte이고, int형보다 메모리 공간의 크기가 작기 때문이다.

위 그림처럼 result 자료형인 byte형을 int형으로 코드를 수정하거나 산술연산의 결과값을 캐스트연산자를 사용하여 
강제형변환을 해야 에러가 사라진다.

[타입 변환 예제4] int형보다 큰 기본자료형의 산술연산 결과는 더 큰 자료형의 데이터 타입을 따른다.

실수와 정수의 연산을 받을 result1 변수의 타입은 double형의 메모리 공간이 상대적으로 더 크기때문에 double로 
잡아주어야 에러가 나지 않는다.

[타입 변환 예제5] 숫자형과 문자열형의 산술연산(+)의 결과값은 문자열형이다.

문자열형과 숫자형의 연산은 문자열형으로 출력되기때문에 ?에는 문자열형 타입의 레퍼런스형인 String 클래스로
받아줘야한다.

[타입 변환 예제6] 문자열형 리터럴을 숫자형의 변수에 담으려면 Integer.parseInt(문자열형변수)를 사용해야한다.

1. 문자열형 변수 str의 값 "12345"와 숫자 1의 연산에서 12346으로 연산결과가 나오기 위해서는 위 그림과 같이 result 
   변수의 자료형은 int형으로 잡아주어야하며, 문자열 "12345"를 담고있는 변수 str을 Integer.parseInt(문자열변수) 
   코드로 숫자형으로 변환시킨 후 변수 result에 저장해야한다.
2. 1번을 하지않고 문자열 "12345"와 숫자 1을 연산하게되면 위 그림과 같이 12346이 아닌 123451이 된다.
   (문자열형과 숫자형의 연산은 문자열형로 출력되기때문이다.)
   

[타입 변환 예제7] 문자열형에서 숫자형(실수)으로 타입 변환

1. 문자열형 변수 str의 리터럴은 "1234.56"은 숫자형(실수)으로 바꾸려면 숫자형(정수)에서 사용했던 Integer를 사용
   하는것이 아닌 Double.parseDouble(문자열형 변수)로 타입을 변환시켜줘야한다.
2. 우리는 앞에서 format 출력서식에서 배웠던 실수형 지시자 %f 사이에 정밀도를 표현하기 위해 [.precision]인 .2를 
   넣어 소수점 2번째자리까지 출력하면 된다. 정밀도를 표현하지 않으면 이클립스에선 기본적으로 소수점 6번째자리까지 
   출력된다.
profile
Today I Learned 🌙
post-custom-banner

0개의 댓글