새소식

Java

[Java] 변수 타입 변환

  • -

 

1. 자동 타입 변환

 

1)    자동 타입 변환의 개념

 

자동 타입 변환(automatic type casting)은 암시적 타입 변환(implicit type casting)이라고도 불림.

크기가 작은 데이터 타입을 크기가 큰 데이터 타입으로 자동으로 변환하는 것으로

개발자가 별도의 타입 변환 연산자를 사용하지 않아도 자동으로 처리됩니다.

 

 

자동 타입 변환

 

 

2)    자동 타입 변환의 규칙

 

  • 작은 데이터 타입에서 큰 데이터 타입으로 (byte < short < int < long < float < double)

 

  • 정수 타입에서 실수 타입으로의 자동 타입 변환은 무조건적으로 일어남(허용범위가 더 크기 때문)

 

  • char 타입의 경우 int 타입으로 자동 변환되면, 유니코드 값이 int 타입에 저장됨.

 

※ 단, char 타입보다 허용 범위가 작은 byte 타입은 char 타입으로 자동 변환이 불가능하다.

→ char 타입의 허용 범위는 음수를 포함하지 않으나, byte 타입은 음수를 포함하기 때문

 

<예시1>
byte c = 5;
int d = c; // byteint로 자동 타입 변환
<예시2>
long longValue = 5000000000L;
float floatValue = longValue;
// 5.0E9f로 저장됨
double doubleValue = longValue;
// 5.0E9로 저장됨
<예시3>
char charValue = 'A';
int intValue = charValue;

//65가 저장됨 (유니코드 A가 65이므로)

 

 

 

 

 

2. 강제 타입 변환

 

1)    강제 타입 변환의 개념

 

강제 타입 변환(forced type casting)은 명시적 타입 변환(explicit type casting)이라고도 불림.

크기가 큰 데이터 타입을 작은 데이터 타입으로 변환하는 것

 

주의해야 할 점은 강제 타입 변환은 데이터 손실이 발생할 수 있으므로, 변환될 값의 범위를 고려해야 합니다.

 

 

 

 

 

 

2)    강제 타입 변환의 예시

  • int 타입 → byte 타입
<예시>
int a = 2000;
byte b = (byte) a; // int byte로 강제 타입 변환
System.out.println(b); // 출력: -48 (데이터 손실 발생)

 

  • int 타입은 → char 타입
<예시>
int intValue = 65
char charValue = (char) intValue;
System.out.println(charValue); // "A"가 출력

 

  • 실수 타입(float, double)은 정수 타입(byte, short, int, long)으로 자동 변환되지 않기 때문에 강제 변환을 사용해야하고,
  • 이 경우 소수점 이하 부분은 버려지고, 정수 부분만 저장됨.
<예시>
double x = 3.14;
int y = (int) x; // double int로 강제 타입 변환
System.out.println(y); // 출력: 3

 

 

 

3. 연산에서의 자동 타입 변환

 

1)   byte, short, char 간의 연산

 

두 피연산자가 모두 int보다 작은 데이터 타입인 경우, 두 피연산자는 int로 자동 타입 변환된 후 연산이 수행됩니다.

<예시1>
byte a = 10;
byte b = 5;
byte result = a + b; //컴파일 에러
int result a + b;

byte 변수 a, b가 피연산자로 사용되면 int ㅏㅌ입으로 변환되어 연산되므로 연산 결과를 byte에 저장하면 컴파일 에러가 발생함.
<예시2>
int a = 10;
int b = 5;
int result a + b;

 

 

2)   int와 long 간의 연산

 

두 피연산자 중 하나가 long인 경우, 다른 피연산자는 long으로 자동 타입 변환된 후 연산이 수행됩니다.

<예시>
int a = 50;
long b = 100;
long c = a + b; // int long long으로 자동 타입 변환 후 연산
System.out.println(c); // 출력: 150

 

 

 

3)   int, long, float, double 간의 연산

 

두 피연산자 중 하나가 double인 경우, 다른 피연산자는 double로 자동 타입 변환된 후 연산이 수행됩니다.


두 피연산자 중 하나가 float인 경우, 다른 피연산자는 float으로 자동 타입 변환된 후 연산이 수행됩니다.

<예시1>
int a = 5;
float b = 3.14f;
float c = a + b; // int float float으로 자동 타입 변환 후 연산
System.out.println(c); // 출력: 8.14
<예시2>
int a = 10;
double b = 5,5;
double c = a + b; // a가 double 값으로 변환 후 연산
System.out.println(c); // 출력: 15.5
<예시3>★
int a = 1;
int b = 2;
double result = a / b;
System.out.println(result);

결과값은 0.5가 출력되는 것이 아닌 0.0이 출력됨 → 정수 연산의 결과는 정수이기 때문에!!!
즉, a / b의 연산 결과는 0이 되고, 0을 double로 변환하여 0.0이 됨.

위 코드의 결과 값이 0.5가 되기 위해서는 a / b를 정수 연산이 아니라 실수 연산으로 변경해야함.
즉, a, b 둘 중 하나 또는 둘다 double 타입으로 변환해주면 됨.


● 방법 1)
int a = 1;
int b = 2;
double result = (double) a / b;


● 방법 2)
int a = 1;
int b = 2;
double result = a / (double) b;


● 방법 3)
int a = 1;
int b = 2;
double result = (double) a / (double) b;


※ 주의사항
만약 (double) (a / b)로 잘못 수정하면 0.5가 아니라 0.0이 나오는데, 그 이유는 ( a / b)가 먼저 연산되어
0이 나오고, 그 값에 double이 적용되어 0.0이 나오게 됨.

 

 

 

4)   + 연산에서의 문자열 자동 타입 변환

<예시>

숫자 + 숫자 = 숫자 (덧셈 연산)
int value = 1 + 4; → int value = 5;

문자열 + 숫자 = 문자열숫자 (결합 연산)
String str = "1" + 4; String str = "1" + "4";  String str = "14";

숫자 + 문자열 = 숫자문자열 (결합 연산) 
String str = 1 + "4";  String str = "1" + "4";  String str = "14";

★ 특정 부분을 우선 연산하고 싶을 경우 괄호()로 감싸줍니다.

 

 

 

 

5)   문자열을 기본 타입으로 강제 타입 변환

문자열을 기본 타입으로 강제 변환하기 위해서는 해당 기본 타입의 래퍼 클래스의 파싱 메서드를 사용해야 합니다.

 

 

① 문자열을 정수로 변환 (parseInt 메서드 사용)

<예시>
String str1 = "123";
int number = Integer.parseInt(str1);
System.out.println(number); // 출력: 123

② 문자열을 실수로 변환 (parseDouble 메서드 사용)

<예시>
String str2 = "3.14";
double value = Double.parseDouble(str2);
System.out.println(value); // 출력: 3.14

③ 문자열을 불리언으로 변환 (parseBoolean 메서드 사용)

<예시>
String str3 = "true";
boolean flag = Boolean.parseBoolean(str3);
System.out.println(flag); // 출력: true

④ 문자열을 글자(char)로 변환 (charAt 메서드 사용)

<예시>
String str4 = "Hello";
char ch = str4.charAt(0);
System.out.println(ch); // 출력: H

 

※ 주의사항

변환하려는 문자열이 해당 기본 타입의 형식과 호환되어야 하며, 

그렇지 않은 경우 NumberFormatException 또는 예외가 발생할 수 있습니다.

또한, 문자열이 해당 기본 타입으로 정확히 변환될 수 있는지 유효성을 확인해야 합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2023.06.17 - [Java] - 변수 선언과 접근제한

 

변수 선언과 접근제한

1. 변수 선언 1) 변수 선언의 개념 데이터를 저장하고 참조하기 위해 메모리 공간을 할당하는 과정 변수는 이름을 가지며, 그 이름을 통해 해당 메모리 공간에 저장된 값을 읽거나 변경할 수 있습

devwarriorjungi.tistory.com

 

'Java' 카테고리의 다른 글

[Java] List 리스트의 개념과 종류  (0) 2023.07.03
[Java] 객체 지향 프로그래밍  (0) 2023.06.20
[Java] 클래스 선언 및 생성자  (0) 2023.06.19
[Java] 변수 선언과 접근제한  (0) 2023.06.17
[Java] 변수의 개념과 타입  (1) 2023.06.16
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.