경주란 빨리 달리는 사람들의 것이 아니라
       계속 뛰어가는 사람들의 것이다.
LinkTree🌲

Development/Java

[Java, 개념] 객체의 다운캐스팅

컴공희 2022. 7. 22. 00:40

지난번에 업 캐스팅과 다운 캐스팅에 대해서 공부해봤다. 

쉽게 말하면 업캐스팅은 큰쪽의 맞추는 것이고 다운 캐스팅은 작은 쪽에 맞추는 것이다. 

업캐스팅은 문제(오류가 발생)가 되지 않는다. 왜냐하면 비유적으로 물고기가 어떤 어항이든 크기만 하면 모두 잘 들어가기 때문이다. 

문제는 물고기보다 작은 어항일 때 즉 Downcasting 에서 오류가 발생할 수 있다.

메모리 구조로 확인해보자


타입 다운캐스팅 

만약 상황이 A -> B -> C 로 상속을 받는다고 가정하자 C의 부모는 B이고 B의 부모는 A이다.

 

가정 1

 

A a = new B();

에서 앞 A는 참조하는 객체를 가르키는 것을 의미한다.

따라서 a가 가르키는 것은 A class를 가르킨다.

따라서 이 문장은 가능하다.


가정 2

A a = new B();

B b = (B) a;

이렇게 B()생성자를 통해서 만들면 자동적으로 부모 생성자도 호출하기 때문에 아래 그림과 같은 메모리 구조로 생성된다.

따라서 , 이 문장도 B 객체를 가르키는데 A에서 B로 형변환은 가능하다. 


가정 3. 

A a = new B();

C c = (C) a;

여기서 애초에 객체가 만들어졌을 때 B로 만들어 졌으며 C는 존재하지 않는다. 

따라서 다운 캐스팅을 할 수 없다.