형변환
public class Variables {
public static void main(String[] args){
System.out.println("숫자 연산자");
double x = 3.14;
int y = (int) x;
System.out.println(y);
int a = 9;
int b = 5;
System.out.println((double) a / b);
}
}
Literal
리터럴이란 소스코드의 고정된 값을 대표하는 용어입니다. 무슨말인지 잘 모르시겠죠? 예제를 통해서 보겠습니다.
int myInt = 123;
byte myByte = 38;
short myShort = 2;
여기서 123, 38, 2는 '정수 리터럴'입니다. 기본적으로는 int 자료형이지만 byte나 short 변수의 초기값으로 설정하면 아무 문제 없이 값이 들어갑니다.
영상 강의에서 다룬 적 있는 long에 대해서도 봅시다.
long myLong = 12345678910;// 오류: 정수 값이 너무 크다
여기서도 오른쪽 12345678910은 int 리터럴인데, int가 담을 수 있는 범위를 넘어섰기 때문에 오류가 나는 것입니다. 이 문제를 해결하기 위해서는 뒤에 L을 붙여주면 됩니다.
long myLong = 12345678910L;
위에서 12345678910L은 정수 리터럴이 아니라 '롱 리터럴'입니다.
long e = 123;
long f = 123L;// long의 리터럴 표현방법float g = 3.14;// 오류: 형이 맞지 않음. 필요한 값: float, 발견된 값: doublefloat h = 3.14f;// float의 리터럴 표현방법float i = 314f;// float의 리터럴 표현방법double j = 3.14;
double k = 314d;// double의 리터럴 표현 방법
아무런 표기가 없는 소수형은 double이라는 것을 알겠죠? 물론 double을 명시하는 리터럴로 d를 붙여주는 방법도 있습니다.
랭크
소수형이 정수형보다 강하기 때문에(랭크가 높기 때문에) 소수형과 정수형 간의 연산에는 소수형 결과값이 나옵니다. 표의 위에서 부터 아래로 갈수록 랭크가 높은 자료형입니다. 기준은 각 자료형이 가질 수 있는 값의 범위입니다.
형 변환
자바의 숫자 자료형들은 위에서 배운 랭크에 따라 형 변환이 가능합니다.
바꾸고자 하는 형(to)이 기존의 형(from)보다 넓은 데이터를 담을 수 있는 자료형일 경우 특별한 처리 없이 형을 변환할 수 있습니다.
int a = 36;
double b = a;// int to doubleshort c = 17;
long d = c;// short to longfloat e = 3.14f;
double f = e;// float to double
타입 캐스팅 (Type Casting)
값(혹은 변수) 앞에 (자료형)(예: (int) x)을 적어주면 강제적으로 형을 변환시킬 수 있습니다. 물론 형 변환이 가능한 경우에 대해서만 가능하겠죠? 숫자 자료형들 사이에서는 모두 가능합니다.
int a = 3;
double b = (double) a;
long c = (long) a;
System.out.println(b);
System.out.println(c);
3.0
3
더 큰 랭크의 값을 더 작을 랭크의 변수에 담는 것도 가능하지만, 데이터의 손실이 있다는 걸 주의해주세요!
double pi = 3.14;
int myInt = (int) pi;// 데이터 손실 (소수 부분)
System.out.println(myInt);
3
또 다른 예시를 봅시다.
int a = 9, b = 5;
System.out.println(a / b);
1
이렇게 정수값 a와 b가 주어졌을 때, 9 / 5를 하면 1이 나오죠? 여기서 1.8이 나오게 하고 싶으면 타입 캐스팅을 해서 9를 9.0으로 바꿔주고, 9.0 / 5를 계산하면 됩니다.
int a = 9, b = 5;
System.out.println((double) a / b);
1.8
형 변환은 나중에 배울 클래스, 상속 등의 개념에서도 등장합니다. 그 때도 숫자형의 형 변환 처럼 방향성이 중요한 역할을 하니, 형 변환은 잘 기억해두세요!
실습과제
연산자와 형 변환
여러분이 국어(koreanScore) 86점, 수학(mathScore) 94점, 과학(scienceScore) 87점, 컴퓨터(computerScore) 100점을 맞았다고 합시다.
이 값들을 사용하여 평균 점수(average)를 구하고 소수로 출력해보세요.
public class Variables {
public static void main(String[] args){
int koreanScore, mathScore, scienceScore, computerScore;
koreanScore = 86;
mathScore = 94;
scienceScore = 87;
computerScore = 100;
double average = (koreanScore + mathScore + scienceScore + computerScore) / 4d;
System.out.println(average);
}
}
--------------------------------------------------------------------------------------
public class Variables {
public static void main(String[] args){
int koreanScore, mathScore, scienceScore, computerScore;
koreanScore = 86;
mathScore = 94;
scienceScore = 87;
computerScore = 100;
double average = ((double) (koreanScore + mathScore + scienceScore + computerScore) / 4);
System.out.println(average);
}
}
'Programming > Java' 카테고리의 다른 글
자바 기초부터 ABC (9) - Switch (0) | 2021.11.14 |
---|---|
자바 기초부터 ABC (8) - if, else (0) | 2021.11.14 |
자바 기초부터 ABC (6) - 연산자 (0) | 2021.11.13 |
자바 기초부터 ABC (5) - 자료형 (0) | 2021.11.12 |
자바 기초부터 ABC (4) - 변수 (0) | 2021.11.12 |