Java 업캐스팅(Upcasting) & 다운캐스팅(Downcasting)

Kkackit·2021년 12월 8일
0

Java

목록 보기
1/3

고양이를 가리킬 수 있는 손가락 -> 고양이
사람을 가리킬 수 있는 손가락 -> 사람

그렇다면 생물을 가리킬 수 있는 손가락이라면?

이처럼 업 캐스팅은
기본 클래스의 포인터(생물을 가리키는 손가락)로
파생 클래스의 객체를 가리키는 것을 말한다.

업캐스팅(upcasting)
서브 클래스의 레퍼런스를 슈퍼 클래스 레퍼런스에 대입

즉 슈퍼 클래스 레퍼런스로 서브 클래스 객체를 가리키는 것

class Person{}
class Student extends Person {}

Person p;
Student s = new Student();

p = s; // 업캐스팅 슈퍼 클래스 p로 서브 클래스 s를 가르킴

물론 슈퍼 클래스 레퍼런스로는
객체 내의 슈퍼 클래스 멤버만 접근 가능하다.

다운캐스팅
슈퍼클래스 레퍼런스를 서브 클래스 레퍼런스에 대입

업캐스팅 된 것을 원래대로 되돌리는 것.

반드시 명시적으로 타입 변환을 지정해야함

class Person {}
class Student extends Person{}

Person p = new Student("정근녕"); // 업캐스팅
Student s = (Student)p; // 다운캐스팅 & 명시적으로 강제 타입 변환

그런데 업캐스팅 된 객체의 실제 타입을 구분하기는 어렵다.

그래서 instanceof 연산자를 사용한다.

객체레퍼런스 instanceof 클래스타입

Person p = new Professor();
//Professor - Researcher이자 Person 타입이기도 함

if(p instanceof Person) // true
if(p instanceof Student) // false
if(p instanceof Researcher) // true
if("java" instanceof String) // true
if(3 instanceof ~~int~~) // 문법 오류 : instanceof는 객체에 대한 레퍼런스에만 사용

0개의 댓글