자바 문법

자바 업캐스팅과 instanceof 연산자

Nickman 2024. 4. 9. 19:52

 캐스팅이란 타입 변환을 말한다. 자바에서 클래스에 대한 캐스팅은 업캐스팅(upcasting)과 다운캐스팅(downcasting)으로 나뉜다. 

 자바 상속에서 서브 클래스의 객체는 슈퍼 클래스의 멤버를 모두 가진다. 그러므로 서브 클래스의 객체를 슈퍼 클래스의 객체로 취급할 수 있다. 서브 클래스의 객체에 대한 래퍼런스를 슈퍼 클래스 타입으로 변환하는 것을 업캐스팅이라고 한다. 다음의 예를 보자.

Person p;
Student s = new Student();
p=s; // 업캐스팅

이 코드에서, 슈퍼 클래스 타입의 래퍼런스 p가 서브 클래스 객체(s)를 가리키도록 치환되는 것이 업캐스팅이다. 업캐스팅을 통해 Person 타입의 p는 Student 객체를 가리킨다. 그러나 레퍼런스 p로는 Person 클래스의 멤버만 접근할 수 있다. 

업캐스팅과 반대로 캐스팅하는 것을 다운캐스팅(downcasting)이라고 한다.

Person p=new Student("이재문"); //업캐스팅

Student s=(Student)p; // 다운캐스팅, (Student)의 타입 변환을 반드시 표시

업캐스팅과 instanceof 연산자

업캐스팅을 한 경우,레퍼런스가 가리키는 객체의 진짜 클래스 타입을 구분하기 어렵다. 아래의 예

Person p=new Person();
Person p=new Student();
Person p=new Researcher();
Person p=new Professor();

레퍼런스가 가리키는 객체가 어떤 클래스 타입인지 구분하기 위해, 자바에서는 instanceof 연산자를 두고 있다. instanceof 연산자의 결과 값은 boolean 값으로, '레퍼런스'가 가리키는 객체가 해당 '클래스' 타입의 객체이면 true이고 아니면 false로 계산한다. 

Person jee=new Student();
if(jee instanceof PErson) //true