형변환은 하나의 자료형을 다른 자료형으로 바꾸는 것을 말합니다.
Java는 정적 타입 언어이기 때문에 컴파일 타임에 변수의 타입이 정해지며, 다른 타입 간 연산이나 대입 시 형변환이 필요합니다.
자료형 |
크기 |
설명 |
---|---|---|
byte |
1바이트 |
-128 ~ 127 |
short |
2바이트 |
약 ±32,000 |
int |
4바이트 |
정수 기본형 |
long |
8바이트 |
큰 정수 |
float |
4바이트 |
단정밀도 실수 |
double |
8바이트 |
배정밀도 실수, 기본 실수형 |
char |
2바이트 |
유니코드 문자 |
boolean |
1바이트 |
true 또는 false |
작은 자료형 → 큰 자료형으로 변환
데이터 손실이 없기 때문에 Java에서 자동으로 수행됨
int num = 100;
long bigNum = num; // 자동 형변환
double d = bigNum; // 자동 형변환
byte → short → int → long → float → double
큰 자료형 → 작은 자료형으로 변환
데이터 손실이 발생할 수 있기 때문에 명시적으로 형변환 해야 함
double pi = 3.14;
int intPi = (int) pi; // 강제 형변환, 결과: 3
long big = 100000L;
short s = (short) big; // 강제 형변환, 데이터 손실 가능
정수형을 실수형으로 바꾸면 소수점이 붙음
실수형을 정수형으로 바꾸면 소수점은 버림(truncation)
int a = 10;
double b = a; // 10.0
double c = 5.89;
int d = (int) c; // 5
char는 내부적으로 유니코드(정수) 값이기 때문에 정수와 상호 변환 가능
char ch = 'A';
int code = ch; // 65
char ch2 = (char)(code + 1); // 'B'
업캐스팅 (Upcasting): 하위 클래스 → 상위 클래스 (자동 형변환)
다운캐스팅 (Downcasting): 상위 클래스 → 하위 클래스 (명시적 형변환 필요)
class Animal {}
class Dog extends Animal {}
Animal a = new Dog(); // 업캐스팅: 자동
Dog d = (Dog) a; // 다운캐스팅: 명시적
다운캐스팅 시 실제 객체가 해당 타입이 아니면 ClassCastException 발생
Animal a = new Animal();
Dog d = (Dog) a; // 런타임 오류 발생
if (a instanceof Dog) {
Dog d = (Dog) a;
}
강제 형변환은 항상 값 손실 가능성 있음
float → int, double → int 형변환 시 소수점 버림
int를 byte나 short로 변환할 때 오버플로우 주의
참조형 캐스팅은 instanceof로 안전성 확인
boolean은 형변환 불가능 (숫자 ↔ boolean X)
public class TypeCastingExample {
public static void main(String[] args) {
int i = 100;
double d = i; // 자동 형변환
System.out.println(d); // 100.0
double pi = 3.1415;
int intPi = (int) pi; // 강제 형변환
System.out.println(intPi); // 3
char c = 'Z';
int code = c; // char → int
System.out.println(code); // 90
Animal a = new Dog();
if (a instanceof Dog) {
Dog dog = (Dog) a; // 다운캐스팅 안전
System.out.println("형변환 성공");
}
}
}
실습 위주 접근이 효과적 (특히 숫자 → 문자, 실수 → 정수)
오버플로우 예시를 통한 직관적 이해 유도
참조형 캐스팅은 상속, 다형성 수업 이후에 도입
System.out.println()과 디버깅 활용하여 값 변화 시각적으로 확인
구분 |
자동 형변환 |
강제 형변환 |
---|---|---|
대상 |
작은 타입 → 큰 타입 |
큰 타입 → 작은 타입 |
문법 |
생략 가능 |
(타입) 명시 필요 |
예외 발생 |
없음 |
데이터 손실, 런타임 오류 가능 |
활용 사례 |
정수 → 실수, 업캐스팅 |
실수 → 정수, 다운캐스팅 |