1. 기본 자료형 캐스팅
자동 캐스팅
- 작은 타입에서 큰 타입으로 자동 변환
- 데이터 손실이 없어서 안전
int a = 10;
double b = a; // int 가 double 로 자동 변환
System.out.println(b); // 10.0
강제 캐스팅
- 큰 타입을 작은 타입으로 변환할때는 데이터 손실 가능성이 있어서 명시적으로 처리해야 한다
- `(타입)`을 앞에 써서 변환
double a = 10.5;
int b = (int) a; // double을 int로 강제 변환
System.out.println(b) // 10 (소수점은 잘림)
2. 참조형(객체) 캐스팅
업캐스팅
- 하위 클래스 객체를 상위 클래스 타입으로 변환
- 자동으로 수행되며 데이터 손실은 없지만 상위 클래스의 멤버만 접근 가능
class Animal {
void sound() {
System.out.println("동물이 소리를 냅니다");
}
}
class Dog extends Animal {
void sound() {
System.out.println("멍멍");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
Animal animal = dog; // 업캐스팅(자동변환)
animal.sound(); // "멍멍" 출력
}
}
- `animal` 참조변수는 `Animal` 타입이지만 `Dog` 객체를 가리킨다
- 업캐스팅 후에는 상위클래스(Animal)의 멤버만 사용할 수 있다
다운캐스팅
- 상위 클래스 객체를 하위 클래스 타입으로 변환
- 명시적으로 캐스팅 해야하며 틀릴경우 `ClassCastException`이 발생할수있다
class Animal {
void sound() {
System.out.println("동물이 소리를 냅니다");
}
}
class Dog extends Animal {
void sound() {
System.out.println("멍멍!");
}
void wagTail() {
System.out.println("꼬리를 흔듭니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(); // 업캐스팅
Dog dog = (Dog) animal; // 다운캐스팅 (명시적 변환)
dog.sound(); // "멍멍!" 출력
dog.wagTail(); // "꼬리를 흔듭니다." 출력
}
}
- 다운캐스팅은 객체가 실제로 해당 타입인지 확인후에 해야한다
- `instanceof`로 확인 가능
if (animal intanceof Dog) {
Dod dog = (Dog) animal;
dog.wagTail();
} else {
System.out.println("다운캐스팅이 불가능합니다.");
}
요약
- 기본 타입 캐스팅
- 자동 : 작은(구체적인) -> 큰(추상적인)
- 강제 : 큰 -> 작은
- 참조형 타입 캐스팅
- 업캐스팅 : 하위 -> 상위 (자동)
- 다운캐스팅 : 상위 -> 하위 (명시적, 안전확인 필요)
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
[Java] 조건문 (0) | 2024.12.01 |
---|---|
[Java] 생성자와 오버로딩, getter setter (0) | 2024.12.01 |
[Java] abstract와 interface (0) | 2024.11.30 |
[Java] 접근 제어자 (0) | 2024.11.30 |
[Java] static (0) | 2024.11.30 |