Minwoo Dev.
[Java] 데이터 형변환 본문
이번 게시물에서는 Java에서 데이터의 형변환을 하는 방법에 대해서 설명하겠다.
Type | Size in bytes | Range | Default Value | |
문자 타입 | char | 2 byte | 0 ~ 65,535 | '\u000' |
정수 타입 | byte | 1 byte | -128 ~ 127 | 0 |
short | 2 byte | -32,768 ~ 32,767 | 0 | |
int | 4 byte | -2,147,483,648 ~ 2,147,483,647 | 0 | |
long | 8 byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0L | |
실수 타입 | float | 4 byte | (-3.4 x 10E-38) ~ (3.4 x 10E38)의 근사값 | 0.0F |
double | 8 byte | (1.7 x 10E-308) ~ (1.7 x 10E308)의 근사값 | 0.0 | |
논리 타입 | boolean | 1 byte | true, false | false |
위의 표는 Java 에서 사용하는 데이터 타입들이다.
보면 같은 타입이라도 여러가지 변수 타입이 있는 것을 알 수 있다. 따라서 코드를 작성하다 보면 형변환을 해야하는 상황이 무조건 올 것이다.
차근차근 알아보자.
1. int 정수형 변수를 float, double 형 변수로 형변환하기 (출력)
package chapter_01;
public class _07_TypeCasting {
public static void main(String[] args) {
// int to float, double
int score = 93;
System.out.println(score); // 93
}
}
int 형 정수형 변수를 만들고 그 안에 93이라는 정수값을 저장했다.
그리고 출력하면 93이라는 결과가 출력된다.
위 score 변수를 float형 혹은 double 형으로 출력하고 싶다면 어떻게 해야하겠는가 ?
답은 아래와 같다.
package chapter_01;
public class _07_TypeCasting {
public static void main(String[] args) {
// int to float, double
int score = 93;
System.out.println(score); // 93
System.out.println((float)score); // 93.0
System.out.println((double)score); // 93.0
}
}
변수의 앞에 괄호를 이용하여 바꾸려는 형을 입력한다면 출력값이 바뀌어 나오는 것을 확인할 수 있다.
위 소스코드의 출력 결과는 아래와 같다.
두 번째 출력과 세번째 출력이 각각 float형과 double형으로 변환한 값이다.
2. float, double형 변수를 int형 변수로 형변환하기 (출력)
그럼, 반대로 float, double형 변수를 int형으로 변환해 보자.
package chapter_01;
public class _07_TypeCasting {
public static void main(String[] args) {
// float, double to int
float score_f = 93.3F;
double score_d = 98.8;
}
}
float 형 score_f와 double형 score_d를 int형으로 변환해 보겠다.
package chapter_01;
public class _07_TypeCasting {
public static void main(String[] args) {
// float, double to int
float score_f = 93.3F;
double score_d = 98.8;
System.out.println((int)score_f);
System.out.println((int)score_d);
}
}
근데 여기서 의문점이 생긴다.
실수인 수를 정수로 바꾸면 소수점이 없어지지 않는가 ?
그럼 사라질 때 반올림을 하는가 ? 아니면 그냥 버려지는가 ?
위 소스코드를 실행하여 확인해보겠다.
두 번째 출력값이 99가 아니라 98인 것을 보아 반올림하는 것이 아닌 그냥 소수점 데이터를 버리는 것임을 알 수 있다.
다음은 정수와 실수의 연산에 대하여 알아보겠다.
package chapter_01;
public class _07_TypeCasting {
public static void main(String[] args) {
// 정수 + 실수 연산
int score = 0;
double score_d = 98.8
score = 93 + (int)98.8; // 93 + 98
System.out.println(score); // 191
score_d = 93 + 98.8; // 정수 + 실수에서 정수는 자동으로 .0으로 인식
System.out.println(score_d); // 191.8
}
}
위의 연산을 보면 93 + 98.8 을 score이라는 변수에 넣고 있음을 알 수 있다.
여기서 93은 int 형 변수, 98.8은 double형 변수이다. 따라서 두 수가 더해진다면 다른 형의 두 수를 int형 변수에 넣는 것이다.
따라서 double형 변수인 98.8을 정수형인 int형으로 형변환하여 연산해야 한다.
그 코드가 score = 93 + (int)98.8 이다.
98.8을 정수형으로 바꾸면 소수점이 버려진 98이므로 연산 결과는 191이 된다.
이번에는 double형 변수에 정수 + 실수 연산을 해보겠다.
score_d = 93 + 98.8;
위 코드를 보면 int 형인 93과 double형인 98.8을 더하는 연산임을 알 수 있다.
하지만 여기서 93은 (double)93이라고 적지 않았다.
왜일까?
그 이유는 "자동 형 변환" 에 있다.
int -> long -> float -> double
위 순서의 형변환이라면 자동적으로 형변환이 되어 별도로 형변환을 시킬 필요가 없다.
위 예제의 int형에서 double형 변수로의 형변환도 같은 이유로 자동 형변환된것이다.
반대로, 수동적으로 형 변환을 명시해야하는 순서는 아래와 같다.
double -> float -> long -> int
package chapter_01;
public class _07_TypeCasting {
public static void main(String[] args) {
int score = 191;
double score_d = 191.8
// 변수에 형변환된 데이터 집어넣기
double convertedScoreDouble = score; // 191 -> 191.0
// int -> long -> float -> double (자동 형변환)
int convertedScoreInt = (int)score_d; // 191.8 -> 191
// double -> float -> long -> int (수동 형변환)
}
}
마지막으로, 문자열과 숫자 사이의 변환에 대하여 알아보겠다.
프로그래밍 언어들에서, "14" 와 14는 다른 값이다.
"14"는 문자열이고, 14는 정수로 인식되기 때문이다.
그렇다면 문자열로 입력된 숫자를 정수로 바꾸거나 반대로 할 수 있지 않을까 ?
package chapter_01;
public class _07_TypeCasting {
public static void main(String[] args) {
// 숫자를 문자열로
String s1 = String.valueOf(93);
s1 = Integer.toString(93);
System.out.println(s1); // 93
String s2 = String.valueOf(98.8);
s2 = Double.toString(98.8);
System.out.println(s2); // 98.8
// 문자열을 숫자로
int i = Integer.parseInt("93");
System.out.println(i); // 93
double d = Double.parseDouble("98.8");
System.out.println(d); // 98.8
// 숫자가 아닐 경우
int error = Integer.parseInt("자바");
System.out.println(error);
}
}
우선 숫자를 문자열로 바꾸는 방법에 대해 먼저 보겠다.
숫자를 문자열로 바꾸는 방법, 즉 14를 "14"로 바꾸는 방법으로는 두 가지가 있다.
● String.vlaueOf 사용하기
String val = String.valueOf(93);
위와 같이 코드를 작성한다.
93이라는 정수를 "93"이라는 문자열의 형식으로 바꾸어 준다.
● Integer.toString 사용하기
String s1 = Integer.toString(93);
위와 같이 작성하는 방법도 있다.
두 변수를 출력하면 다음과 같이 출력된다.
그 다음, 문자열을 숫자로 바꾸는 방법도 알아보겠다.
package chapter_01;
public class _07_TypeCasting {
public static void main(String[] args) {
// 문자열을 숫자로
int i = Integer.parseInt("93");
System.out.println(i); // 93
double d = Double.parseDouble("98.8");
System.out.println(d); // 98.8
// 숫자가 아닐 경우
int error = Integer.parseInt("자바");
System.out.println(error);
}
}
먼저, 문자열에서 정수를 만들 때다
● Integer.parseInt 사용하기
int i = Integer.parseInt("93");
그 다음, 문자열에서 실수를 만들 때
●. Double.parseDouble 사용하기
double d = Double.parseDouble("98.8");
이런 식으로 하면 된다.
근데, 문자열에 숫자가 아닌 정말 문자가 들어가있다면 어떻게 될까?
package chapter_01;
public class _07_TypeCasting {
public static void main(String[] args) {
// 숫자가 아닐 경우
int error = Integer.parseInt("자바");
System.out.println(error);
}
}
위 프로그램을 실행하면
위처럼 에러가 발생하는 것을 알 수 있다.
여기까지가 형변환에 대한 설명이다.
출처 - 나도코딩 Java 강의 - https://www.youtube.com/watch?v=NQq0dOoEPUM&t=5915s
'Java' 카테고리의 다른 글
[Java] 산술 연산자 (0) | 2023.10.31 |
---|---|
[Java] 퀴즈 1. 버스 도착 정보 출력 (0) | 2023.10.31 |
[Java] 변수 상수로 만들기 (0) | 2023.10.29 |
[Java] 변수 이름짓기 (2) | 2023.10.29 |
[Java] 주석 (0) | 2023.10.28 |