Java/자바 정리

8. 자바의 '연산' 에서 자동 타입 변환 완전 이해하기!

코딩하는냥이 2025. 4. 15. 15:43
반응형

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