Java/Java 기본

객체의 타입 변환 : 업캐스팅과 다운캐스팅

검정비니 2018. 7. 9. 23:16
728x90
반응형

객체의 타입 변환 : 업캐스팅과 다운캐스팅



캐스팅(casting)이란 개발자가 프로그램 코드로 행하는 강제 타입 변환이다. 자바에서 캐스팅은 업캐스팅과 다운캐스팅의 두 가지가 있다.



1. 업캐스팅(upcasting)


  • - 서브 클래스의 레퍼런스를 슈퍼 클래스 레퍼런스에 대입

  • 슈퍼 클래스 레퍼런스로 서브 클래스 객체를 가리키게 되는 현상


서브 클래스는 슈퍼 클래스의 모든 특성을 상속받는다. 따라서 서브 클래스는 슈퍼 클래스로 취급될 수 있다. 예를 들면, 사람을 생물이라고 불러도 되는 것과 같다.서브 클래스 객체가 슈퍼 클래스 타입으로 변환되는 것을 업캐스팅(upcasting)이라고 한다.

i.e.
class Person {
String name;
String id;

public Person(String name) {
this.name = name;
}
}

class Student extends Person {
String grade;
String department;

public Student(String name) {
super(name);
}
}

public class UpcastingEx {
public static void main(String[] args) {
Person p;
Student s = new Student("Jude");
p = s; //업캐스팅 발생

System.out.println(p.name); //오류 없음

p.grade = "A"; //컴파일 오류. 업캐스팅에 의해 p의 레퍼런스 타입은 Person 타입이다
}
}


업캐스팅을 하면 객체 내에 있는 모든 멤버 변수들을 다 접근할 수는 없고, 오직 업캐스팅한 슈퍼 클래스의 멤버 변수만 접근이 가능하다.

또한, 업캐스팅을 할 때에는 굳이 명시적 타입 변환을 하지 않아도 된다.



2. 다운 캐스팅


- 슈퍼 클래스 레퍼런스를 서브 클래스 레퍼런스에 대입

- 업캐스팅된 것을 다시 원래대로 되돌리는 것

- 반드시 명시적 타입 변환 지정



업캐스팅 된 것을 다시 원래대로 되돌리는 것을 다운캐스팅(downcasting)이라고 한다. 다운캐스팅은 업캐스팅과 달리 명시적으로 타입을 지정 해야만 한다.



다음 예시 코드를 통해서 더 자세히 알아보도록 하자.


i.e.

public class DowncastingEx {

public static void main(String[] args) {

Person p = new Student("Jude");

Student s;


s = (Student) p; //다운캐스팅


System.out.println(s.name); //오류 없음

s.grade = "A"; //오류 없음

}

}

반응형

'Java > Java 기본' 카테고리의 다른 글

자바에서 객체의 타입을 확인하는 법  (0) 2018.07.09
상속과 생성자  (0) 2018.07.03
상속과 접근 지정자  (0) 2018.07.03
서브 클래스의 객체와 멤버 사용  (0) 2018.07.03
상속 선언  (0) 2018.07.02