본문 바로가기

반응형

자바에서 다양한 자료형끼리 연산을 하면 자동으로 형변환이 일어납니다.
특히 작은 자료형끼리의 연산 결과가 예상과 다르게 나오는 경우도 많기 때문에,
자동 타입 변환(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 원하는 결과 만들기 가능

💡 포인트 정리

  1. byte, short, char → 연산 시 int로 자동 변환됨
  2. 연산에 서로 다른 타입이 섞이면 큰 타입으로 변환
  3. 정수 나눗셈은 항상 소수점 버림! → double로 바꿔야 실수 결과
  4. 자동 변환이 일어나는 규칙을 이해하면, 실수 줄이기 쉬워요!
댓글