반응형
자바에서 다양한 자료형끼리 연산을 하면 자동으로 형변환이 일어납니다.
특히 작은 자료형끼리의 연산 결과가 예상과 다르게 나오는 경우도 많기 때문에,
자동 타입 변환(Promotion)의 원리를 이해하는 것이 중요합니다.
이번 글에서는 연산 중 자동으로 발생하는 타입 변환 과정을 코드로 확인해보겠습니다.
💻 예제 코드
public class OperationPromotionExample {
public static void main(String[] args) {
byte result1 = 10 + 20;
System.out.println(result1);
byte v1 = 10, v2 = 20;
int result2 = v1 + v2;
System.out.println(result2);
byte v3 = 10;
int v4 = 100;
long v5 = 1000L;
long result3 = v3 + v4 + v5;
System.out.println(result3);
char v6 = 'A', v7 = 1;
int result4 = v6 + v7;
System.out.println(result4);
System.out.println((char) result4);
int v8 = 10, result5 = v8 / 4;
System.out.println(result5);
int v9 = 10;
double result6 = v9 / 4.0;
System.out.println(result6);
int v10 = 1, v11 = 2;
double result7 = (double) v10 / v11;
System.out.println(result7);
}
}
💬 코드 설명
1. byte + byte 연산
byte result1 = 10 + 20;
- 숫자 리터럴끼리 연산은 컴파일 타임에 처리되며 byte 범위 내라면 에러 없이 저장됩니다.
- 10 + 20 = 30이 byte 범위(-128~127)라서 문제 없음.
2. byte 변수 + byte 변수 연산
int result2 = v1 + v2;
- 변수끼리 연산은 무조건 int로 변환됨!
- 그래서 결과를 byte가 아닌 int에 담아야 합니다.
3. byte + int + long
long result3 = v3 + v4 + v5;
- 여러 타입이 섞이면 가장 큰 자료형인 long으로 자동 변환됩니다.
- int보다 long이 크므로, 결과 타입도 long.
4. char + int
char v6 = 'A', v7 = 1;
int result4 = v6 + v7;
- 'A'는 유니코드 65입니다.
- 65 + 1 = 66 → 정수 결과가 되므로 int로 저장해야 합니다.
- System.out.println((char) result4); → 다시 문자 'B'로 출력됨.
5. 정수 나눗셈
int result5 = v8 / 4;
- 10 / 4 = 2, 소수점 버림
6. 실수 나눗셈
double result6 = v9 / 4.0;
- 정수와 실수를 연산하면 자동으로 double 변환됨 → 결과 2.5
7. 형변환 후 나눗셈
double result7 = (double) v10 / v11;
- 명시적 형변환으로 double 연산 수행
- 1 / 2 = 0.5
📃 실행 결과
30
30
1110
66
B
2
2.5
0.5
📌 간단 정리
연산 종류 | 변환 여부 | 결과 타입 | 비고 |
byte + byte | 자동 변환 | int | 변수 연산 시 |
byte + int + long | 자동 변환 | long | 가장 큰 자료형으로 |
char + int | 자동 변환 | int | 문자도 유니코드 정수 |
int / int | 자동 변환 없음 | int | 소수점 제거됨 |
int / double | 자동 변환 | double | 실수 결과 |
(double) int / int | 명시적 형변환 | double | 원하는 결과 만들기 가능 |
💡 포인트 정리
- byte, short, char → 연산 시 int로 자동 변환됨
- 연산에 서로 다른 타입이 섞이면 큰 타입으로 변환
- 정수 나눗셈은 항상 소수점 버림! → double로 바꿔야 실수 결과
- 자동 변환이 일어나는 규칙을 이해하면, 실수 줄이기 쉬워요!
'프로그래밍 > JAVA' 카테고리의 다른 글
11. 자바의 증감 연산자 ( ++ / -- ) 완전 이해하기 (1) | 2025.04.16 |
---|---|
10. 자바 Scanner 클래스를 이용한 키보드 입력 받기 (0) | 2025.04.16 |
9. 자바의 기본 타입과 문자열 간의 변환 완전 이해하기! (0) | 2025.04.15 |
7. 자바의 강제 타입 변환 완전 이해하기! (0) | 2025.04.15 |
6. 자바의 자동 타입 변환 완전 이해하기! (0) | 2025.04.15 |
5. 자바의 boolean 타입과 조건 연산자 (0) | 2025.04.15 |