형변환
- 데이터 타입을 변환하는 과정
- 메모리 크기가 같거나 더 크게 할당된 타입으로 변환되면 자동 형변환
메모리 크기가 작은 타입으로 변환되면 명시적(강제) 형변환

자동 형변환(Implicit Casting)
- 자동으로 타입을 변환시켜줌
- 메모리 손실이 없을 때 사용
- 주로 작은 타입에서 큰 타입으로의 변환이 이루어짐
- ex) 'int'에서 'double'로 형변환
: 'int'는 'double'에 비해 메모리 할당이 적게 되므로, 변환 시 데이터 손실이 없어 자동적으로 변환이 이루어진다.
명시적 형변환(Explicit Casting)
- 강제로 형변환을 진행하는 과정
- 메모리 손실이 일어날 수 있음
- 주로 큰 타입에서 작은 타입으로의 변환이 이루어짐
- ex) 'double'을 'int'로 형변환
: 'double'은 'int'에 비해 메모리 할당이 많게 되어서 변환 시 데이터 손실이 생기므로, 명시적으로 형변환을 시켜주어야 한다.
변수의 형변환
자동 형변환
int i = 10;
double d = i;
System.out.println(d);
명시적 형변환
double d = 5.5;
int i = (int) i;
System.out.println(i);
객체의 형변환
- 자바에서는 상속 관계에 있는 클래스들 간에 형변환이 가능
- 아래의 클래스가 있다고 할 때의 업캐스팅과 다운캐스팅을 살펴보자.
class 무기 {
void 공격() {
System.out.println("무기로 공격!")
}
}
class 칼 extends 무기 {
void 공격() {
System.out.println("칼로 공격!");
}
}
업캐스팅
- 자식 클래스의 객체를 부모 클래스 타입으로 변환하는 것
- 자동 형변환이 적용된다.
public class Main {
public static void main(String[] args) {
무기 a무기 = new 칼();
a무기.공격();
}
}
- 이때 a무기는 클래스 '칼'이므로, 공격();은 '칼'안에 있는 메소드로 실행된다.
다운캐스팅
- 부모 클래스의 객체를 자식 클래스 타입으로 변환하는 것
- 수동 형변환을 적용해야 한다.
public class Main {
public static void main(String[] args) {
칼 a무기 = (칼)new 무기();
a무기.공격();
}
}
- 이때 a무기는 클래스 '무기'이므로, 공격();은 '무기'안에 있는 메소드로 실행된다.