캐스팅이란 객체나 변수의 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말한다
Java에서는 데이터 타입이 엄격하게 처리되므로 타입이 서로 다른 객체나 변수 사이에서 값이나 객체를 처리하려면 캐스팅이 필요하다.
기본형 타입의 캐스팅과 참조형 타입의 캐스팅으로 나뉜다.
ㅇ 기본형 타입의 캐스팅
작은 범위의 타입을 큰 범위로 변환 : 자동 형변환
큰 범위의 타입을 작은 타입으로 변환 : 명시적 형변환
int a = 10;
double b = a // 자동 형변환
int c = (int)b; // 명시적 형변환
ㅇ 참조형 타입의 캐스팅
클래스 간의 상속 관계에서 객체 타입을 변환하는 것
부모와 자식 사이에서만 가능하며 업캐스팅과 다운캐스팅이라 한다
업캐스팅
자식 클래스의 객체를 부모 클래스 타입으로 변환하는 것
- 자동변환
자식 클래스의 객체를 부모 클래스 타입으로 변환할 때 명시적으로 형변환을 하지 않아도 된다 - 부모클래스에 정의된 멤버만 접근 가능
자식 클래스에서 추가된 멤버(필드, 메서드)는 사용할 수 없다.
오버라이딩된 메서드는 다형성을 통해 호출 가능하다 - 다형성의 핵심
여러 자식 객체를 부모 타입으로 다룰 수 있어 코드의 유연성과 확장성이 높아진다
// 부모 클래스
class Parent {
void display() {
System.out.println("Parent Class");
}
}
// 자식 클래스
class Child extend Parent {
// 자식클래스에서 메서드 오버라이딩
@Override
void display() {
System.out.println("Child Class");
}
// 자식 클래스에만 존재하는 메서드
void childMethod() {
System.out.println("Child Method");
}
}
public class Main {
public static void main(String[] args) {
Parent obj = new Child(); // 업캐스팅
obj.display(); // Child Class 출력 (오버라이딩)
// obj.childMethod(); 사용 불가능 Parent 클래스에 존재하지 않음
}
}
다운캐스팅
부모 클래스 타입의 객체를 자식 클래스 타입으로 변환하는 것
- 명시적 변환 필요
- 런타임 오류 위험
부모 클래스의 객체가 실제로 자식 클래스의 인스턴스인지 확인하지 않으면 ClassCastException이 발생할 수 있다 - instanceOf 사용권장
다운캐스팅 전 객체가 해당 자식 클래스 타입인지 검사하여 안전성 확보 가능 - 자식 클래스의 고유 멤버를 사용해야할 때 주로 사용
// 부모 클래스
class Parent {
void display() {
System.out.println("Parent Class");
}
}
// 자식 클래스
class Child extend Parent {
// 자식 클래스에만 존재하는 메서드
void childMethod() {
System.out.println("Child Method");
}
}
public class Main {
public static void main(String[] args) {
Parent ojb = new Child(); // 업캐스팅
if (obj instanceOf Child) { // 타입을 확인하는 조건문
Child childObj = (Child) obj // 다운 캐스팅
childObj.childMethod(); // 다운캐스팅 후 자식클래스의 메서드 사용
}
}
}
'Java' 카테고리의 다른 글
JAVA Error & Exception (1) | 2024.12.02 |
---|---|
JAVA 오토박싱 & 오토언박싱 (0) | 2024.12.02 |
JAVA JVM(Java Virtual Machine) (1) | 2024.12.02 |
JAVA String, StringBuffer & StringBuilder (1) | 2024.12.02 |
JAVA 컴파일 과정 (1) | 2024.12.02 |