캐스팅 (Casting )
객체나 변수를 다른 타입으로 변환하는 과정을 의미합니다. 캐스팅은 주로 데이터 타입의 호환성 문제를 해결하기 위해 사용됩니다.
자바에서는 두 가지 주요 캐스팅이 있습니다: 기본형 캐스팅과 참조형 캐스팅
기본형 캐스팅 (Primitive Casting)
기본형 캐스팅은 숫자 타입 간의 변환을 의미합니다. 기본형 캐스팅은 자동(암시적)과 강제(명시적) 캐스팅으로 나눌 수 있습니다.
1. 암시적 캐스팅 (Implicit Casting)
더 작은 크기의 타입에서 더 큰 크기의 타입으로 변환할 때 자동으로 수행됩니다. 예를 들어, int에서 long으로 변환하는 경우입니다.
int num = 10;
long longNum = num; // 암시적 캐스팅
2. 명시적 캐스팅 (Explicit Casting)
더 큰 크기의 타입에서 더 작은 크기의 타입으로 변환할 때 강제로 수행해야 합니다. 예를 들어, double에서 int로 변환하는 경우입니다.
double num = 10.5;
int intNum = (int) num; // 명시적 캐스팅, 값은 10이 됩니다.
참조형 캐스팅 (Reference Casting)
참조형 캐스팅은 객체의 타입을 변환하는 과정입니다. 이는 상속 관계에 있는 클래스들 사이에서 발생합니다. 참조형 캐스팅에는 업캐스팅과 다운캐스팅이 있습니다.
1. 업캐스팅 (Upcasting)
업캐스팅은 서브클래스 타입을 슈퍼클래스 타입으로 변환하는 것을 의미합니다. 이는 암시적으로 수행됩니다.
class Animal {
void makeSound() {
System.out.println("Some sound");
}
}
class Dog extends Animal {
void makeSound() {
System.out.println("Bark");
}
void fetch() {
System.out.println("Fetch");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
Animal animal = dog; // 업캐스팅
animal.makeSound(); // "Bark"
}
}
2. 다운캐스팅 (Downcasting)
다운캐스팅은 슈퍼클래스 타입을 서브클래스 타입으로 변환하는 것을 의미합니다. 이는 명시적으로 수행되어야 하며, 캐스팅이 안전한지 확인하기 위해 instanceof 연산자를 사용하는 것이 일반적입니다.
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(); // 업캐스팅
if (animal instanceof Dog) {
Dog dog = (Dog) animal; // 다운캐스팅
dog.fetch(); // "Fetch"
}
}
}
요약
- 기본형 캐스팅: 숫자 타입 간의 변환.
- 암시적 캐스팅: 작은 타입에서 큰 타입으로 자동 변환.
- 명시적 캐스팅: 큰 타입에서 작은 타입으로 강제 변환.
- 참조형 캐스팅: 객체 타입 간의 변환.
- 업캐스팅: 서브클래스를 슈퍼클래스로 변환 (자동).
- 다운캐스팅: 슈퍼클래스를 서브클래스로 변환 (명시적).
'Java Study' 카테고리의 다른 글
리팩토링(Refactoring) (0) | 2024.07.10 |
---|---|
"섀도잉(Shadowing)"과 "하이딩(Hiding)" (0) | 2024.07.08 |
필드(Field) (0) | 2024.06.28 |
메서드(Method)와 생성자(Constructor) (0) | 2024.06.28 |
클래스(Class)의 개념 (0) | 2024.06.27 |