본문 바로가기

JAVA

[JAVA] UpCasting / DownCasting

참조형 데이터의 형변환에서 UpCasting(업캐스팅) 과 DownCasting(다운캐스팅)에 대해 알아보자.

 

업캐스팅과 다운캐스팅의 경우 서로 연관이 있어야 변환이 가능하다.

 

예를 들면,

- 상속관계인 경우

- 인터페이스로 확장된 경우

이런 관계를 맺고 있는 클래스일 때 업캐스팅과 다운캐스팅이 되는 것이다.

 

예제를 통해 자세히 살펴보자.

 

클래스 Person이 있고 클래스 Student가 있다. 

Student는 Person을 상속받은 하위클래스라고 하자.

 

Person person = new Person( ); 

Student student = new Student( );

각각 클래스 타입의 객체를 위와 같이 생성하는 것은 당연히 문제가 없다.

Person 타입의 데이터인 person변수는 실제 데이터인 new Person( ) 라는 인스턴스가 Person의 정보를 모두 가지고 있으므로 오류가 나지 않는다. Student 역시 마찬가지다.

 

그렇다면 아래의 경우들을 보자.

 

1. UpCasting

 

person 변수는 Person 타입의 데이터 모두를 원한다. new Student( ) 라는 인스턴스에는 Person 타입이 원하는 데이터를 모두 가지고 있을까? 

 

Student 클래스는 Person 클래스를 상속받았기 때문에 모두 가지고 있다.

그렇기 때문에 위와 같은 UpCasting이 가능하다.

 

이렇게 UpCasting이 진행되었기 때문에 person은 Student의 멤버인 dept에는 접근할 수 없다. (컴파일 타임 오류 발생)

 

 

dept로 접근을 위해서는 다운캐스팅을 해줘야 한다.

 

 

 

1. DownCasting

다운캐스팅을 위해서는 반드시 업캐스팅이 선행되어야 하며 캐스팅하고자 하는 타입을 명시해줘야 한다.

 

 

다운캐스팅 후에는 student가 name과 dept 모두에게 접근이 가능함을 알 수 있다.