캐스팅 (Casting)
캐스팅은 프로그래밍에서 변수의 타입을 변경하는 것이다.
캐스팅이 필요한 이유
1. 다형성
상속과 오버라이딩을 통해 부모 클래스와 자식 클래스 간에 다형성을 구현할 수 있고, 부모 클래스의 레퍼런스로 자식 클래스의 객체를 다룰 수 있다. 이때, 부모 클래스의 레퍼런스로 자식 클래스의 메서드를 호출하면, 오버라이딩된 메서드가 실행된다.
그러나 부모 클래스의 레퍼런스로는 자식 클래스에 추가된 메서드나 속성을 직접 호출할 수 없다. 이때, 캐스팅을 사용하여 부모 클래스의 레퍼런스를 자식 클래스로 캐스팅하면, 추가된 기능에 접근할 수 있다.
class Animal {
void makeSound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Dog barks");
}
void fetch() {
System.out.println("Dog fetches a ball");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.makeSound(); // 다형성에 의해 Dog 클래스의 오버라이딩된 메서드 호출
if (myDog instanceof Dog) {
Dog myRealDog = (Dog) myDog; // 캐스팅하여 Dog 클래스의 메서드 사용
myRealDog.fetch();
}
}
}
2. 상속
상속을 사용하여 클래스 간에 공통적인 특성을 추상화할 수 있다. 이때, 캐스팅을 통해 범용적인 코드를 작성할 수 있으며, 런타임에 객체의 실제 타입에 따라 적절한 처리를 할 수 있다.
캐스팅의 종류
1. 업 캐스팅 (묵시적 형변환)
데이터를 더 큰 크기를 가진 데이터 타입으로 변환하는 것이다. 더 작은 범위의 값을 더 큰 범위의 타입으로 할당하는 경우에 자동으로 수행된다.
아래 코드와 같이 작은 정수 타입에서 큰 정수 타입으로의 캐스팅이 업 캐스팅이다.
int smallInt = 5;
double bigDouble = smallInt; // 업 캐스팅
2. 다운 캐스팅 (명시적 형변환)
데이터를 더 작은 크기를 가진 데이터 타입으로 변환하는 것이다. 더 큰 범위의 값을 더 작은 범위의 타입으로 할당하려면 명시적으로 캐스팅을 수행해야 한다.
아래 코드처럼 부동소수점 타입에서 정수 타입으로 변환 시 즉, 다운 캐스팅을 수행하면 소수점 이하의 값이 버려지기 때문에 값의 손실이 발생할 수 있다.
double bigDouble = 5.67;
int smallInt = (int) bigDouble; // 다운 캐스팅
'Languages > Java' 카테고리의 다른 글
[Java] 고유 락 (Intrinsic Lock) (0) | 2023.08.31 |
---|---|
[Java] 스레드 (Thread) (0) | 2023.08.31 |
[Java] 문자열 클래스 & 오브젝트 클래스 (0) | 2023.08.10 |
[Java] 직렬화 (Serialization) (0) | 2023.07.31 |
[Java] 오토 박싱(Autoboxing) & 오토 언박싱(Unboxing) (0) | 2023.07.31 |