자동 타입 변환(Implicit Type Conversion)이란 컴파일러나 인터프리터가 개발자의 명시적인 지시 없이 한 데이터 타입을 다른 데이터 타입으로 변환하는 과정을 의미합니다. 이를 "암시적 형변환" 이라고도 합니다.
인터프리터(Interpreter)는 소스 코드 한 줄 한 줄을 실행하면서 번역하는 프로그램을 의미합니다.
즉, 전체 코드를 한꺼번에 기계어로 변환하는 것이 아니라, 한 줄씩 읽고 즉시 실행하는 방식입니다.
int → float, float → doublebyte → int), 실수끼리 변환 (float → double)byte a = 10;
int b = a; // byte → int (자동 변환)
System.out.println(b); // 출력: 10
✔ 작은 크기의 byte가 더 큰 크기의 int로 변환됨
int num = 42;
double d = num; // int → double (자동 변환)
System.out.println(d); // 출력: 42.0
✔ int는 정수이지만, 자동 변환을 통해 실수형 double로 변환됨
char ch = 'A';
int ascii = ch; // char → int (자동 변환)
System.out.println(ascii); // 출력: 65 ('A'의 ASCII 코드 값)
✔ char는 내부적으로 숫자로 저장되므로, int로 자동 변환됨
큰 크기의 타입을 작은 크기로 변환하는 경우 (데이터 손실 가능)
int num = 130;
byte smallNum = num; // 오류 발생! (명시적 형변환 필요)
✅ 해결 방법: 명시적 변환(캐스팅) 사용
byte smallNum = (byte) num; // 강제 형변환 (데이터 손실 발생 가능)
boolean은 자동 변환되지 않음
boolean flag = true;
int num = flag; // 오류 발생! (boolean → int 자동 변환 불가능)
수식에서의 변환
→ 연산을 수행할 때, 작은 타입이 큰 타입으로 변환됨
int a = 5;
double b = 2.5;
double result = a + b; // int → double 자동 변환
System.out.println(result); // 출력: 7.5
메서드 호출 시 타입 변환
→ 메서드 매개변수에 맞게 자동 변환됨
void printDouble(double x) {
System.out.println(x);
}
int num = 10;
printDouble(num); // int → double 자동 변환 (출력: 10.0)
| 변환 전 타입 | 변환 후 타입 | 예시 |
|---|---|---|
byte | short, int, long, float, double | byte a = 10; int b = a; |
short | int, long, float, double | short s = 20; float f = s; |
int | long, float, double | int i = 30; double d = i; |
long | float, double | long l = 40L; float f = l; |
float | double | float f = 5.5f; double d = f; |
char | int, long, float, double | char c = 'A'; int i = c; |