Parent p = new Child(); //업캐스팅 -p는 Parent형.
Child c = (Child) p; //다운캐스팅! -p는 Child형.
- 업캐스팅(upcasting)과 다운캐스팅(downcasting)은 객체 지향 프로그래밍에서 클래스의 상속과 관련된 개념이다.
- 말 그대로 업캐스팅은 하위 클래스에서 상위 클래스로 형 변환하는 것을 의미한다
- 다운캐스팅은 상위 클래스에서 하위 클래스로 형 변환을 하는것을 의미 한다.
업캐스팅 (Upcasting)
업캐스팅은 하위 클래스의 객체를 상위 클래스의 객체로 변환하는 것을 말합니다. 이 변환은 자동으로 이루어집니다.
class Mammal {
void walk() {
System.out.println("Mammal is walking");
}
}
class Cat extends Mammal {
void meow() {
System.out.println("Cat is meowing");
}
}
public class Main {
public static void main(String[] args) {
Mammal mammal = new Cat();
mammal.walk();
}
}
위 코드에서 Mammal mammal = new Cat();는 업캐스팅의 예입니다. '고양이' 클래스의 인스턴스를 생성하지만, 이를 '포유류' 타입의 참조 변수로 참조하고 있습니다. 업캐스팅된 객체는 상위 클래스에서 정의된 메소드만 호출할 수 있습니다. 따라서 mammal.walk();는 정상적으로 동작하지만, mammal.meow();는 오류가 발생합니다.
다운캐스팅 (Downcasting)
다운캐스팅은 업캐스팅의 반대로, 상위 클래스의 객체를 하위 클래스의 객체로 변환하는 것을 말합니다. 이 변환은 명시적으로 해야 합니다.
public class Main {
public static void main(String[] args) {
Mammal mammal = new Cat();
mammal.walk();
Cat cat = (Cat) mammal;
cat.meow();
}
}
- 위 코드에서 (Cat) mammal 부분이 다운캐스팅입니다. 업캐스팅된 'mammal' 객체를 다시 'Cat' 타입으로 다운캐스팅하고 있습니다.
- 다운캐스팅은 업캐스팅의 반대 개념으로, 상위 클래스의 객체를 하위 클래스의 객체로 변환하는 것을 말합니다. 이 변환은 명시적으로 해야 합니다. 예를 들어, 위에서 업캐스팅한 '포유류' 객체를 다시 '고양이' 객체로 변환하려면 다음과 같이 다운캐스팅해야 합니다.
- 다운캐스팅 후에는 원래 하위 클래스의 메소드를 모두 사용할 수 있습니다. 하지만 잘못된 다운캐스팅은 실행 시 오류를 발생시킬 수 있으니 주의해야 합니다. 예를 들어, '강아지' 객체를 '고양이'로 다운캐스팅하려고 하면 오류가 발생합니다.
'Java > OOP' 카테고리의 다른 글
[OOP] C3. 자바와 객체지향 (1) | 2024.02.05 |
---|---|
[OOP] ==과 equals()의 차이점 (0) | 2024.02.03 |
[OOP] C6. SOLID: 효율적인 객체지향 설계를 위한 5대 원칙 (0) | 2024.01.29 |
[OOP] 가비지 컬렉션(Garbage Collection) - 생성과 소멸 (1) | 2024.01.29 |
[OOP] Call by Value 와 Call by Reference (0) | 2024.01.28 |