Java 다형성 - 캐스팅 종류
자식 타입의 기능을 사용하려면 다운캐스팅 (...) 결과를 변수에 담아 기능을 사용한다.
Child child = (Child) parent;
child.childMethod();
이러한 다운캐스팅 결과를 변수에 담는 과정이 번거로운 것을 볼 수 있다.
이러한 과정 없이 일시적 다운 캐스팅을 사용하여 자식 클래스의 기능을 호출할 수 있다.
일시적 다운 캐스팅
package poly;
public class PolyMain {
public static void main(String[] args) {
// 자식 변수 생성
// 생성한 자식 변수에게 인스턴스 참조
// 다운 캐스팅 사용 (부모 타입 > 자식 타입)
Parent parent = new Child();
Child child = (Child) parent;
// 일시적 다운 캐스팅 - 메소드 호출한 순간만 다운캐스팅
((Child) parent).childMethod();
}
}
Parent 타입 변수를 일시적으로 다운 캐스팅하여 Child 타입에서 찾게 하는 것이 일시적 다운 캐스팅이다.

일시적 다운 캐스팅을 사용하여도 Parent 타입이 Child 타입으로 변경되지는 않는다. 해당 참조 값을 꺼내어 Child 타입이 되는 것이다.
parent 변수는 Parent 타입으로 유지되어 있다.
이렇게 새로운 변수 생성 없이 인스턴스의 자식 클래스 기능을 사용할 수 있었다.
다운 캐스팅
Parent parent = new Child();
Child child = (Child) parent;
child.childMethod()
새로운 Child 타입으로 child 생성하였다. parent 변수는 강제로 Child 클래스로 다운 캐스팅되어 child 에게 할당하여 child.childMethod()
코드를 호출할 수 있었다.

업 캐스팅
생성한 child
를 다시 Parent 클래스로 할당하고 싶은 경우, 캐스트 (..)
키워드를 사용하지 않고도 업 캐스팅을 할 수 있다.
Parent parent = new Child();
Child child = (Child) parent;
Parent p2 = (Child) child; // 다운 캐스팅
Parent p3 = child; // 다운 캐스팅, 캐스트 문법 생략 가능
p2.parentMethod();
업캐스팅은 문법적으로 생략을 허용해주고 있다.
"처음부터 Child child = new Child();
상속으로 계속 이용만 해도 되는데?"
화만 나고 불편한 점만 있어 보인다고 미래의 내가 생각하고 있을 것이다.
다형성의 장점을 알아내려면 기본 지식이 많이 요구하므로 기본기를 튼튼하게 쌓아놓아야한다.