Java - Reference variable casting

iseon_u·2022년 5월 7일
0

Java

목록 보기
30/77
post-thumbnail

Reference variable casting 참조변수의 형변환


  • 사용할 수 있는 멤버의 개수를 조절하는 것 ⭐
  • 주소 값, 객체는 그대로 유지
  • 조상 자손 관계 참조변수만 서로 형변환 가능 ⭐
  • 업캐스팅이 선행된 경우, 다운 캐스팅 성립 (업캐스팅 원상태로 복구)
  • 참조 변수 타입을 맞춰야 대입 연산 가능
  • 참조 변수가 가리키는 실제 객체가 중요 (멤버의 개수를 확인 ✅)
Hyundai h = new Hyundai();
Car c = (Car)h; // OK, 조상인 Car 타입으로 형변환 (생략 가능)
Hyundai h2 = (Hyundai)c; // OK, 자손인 Hyundai 타입으로 형변환 (생략 불가)Kia k = (Kia)h; // ERROR, 상속 관계가 아닌 클래스 간의 형변환 불가

사용 가능한 멤버 개수 변화 (5개 → 4개 → 5개)

  • 인스턴스를 확인하고

주요 에러 🔴

  • ClassCastException - 형변환 실행 에러
    • 자식 타입 참조변수로 부모 타입 객체 가리킬 수 없음
    • 자식의 멤버 개수가 부모의 멤버 개수보다 같거나 많다.
    • 없는 객체 호출 불가 에러
    • 컴파일 에러 없음 - 실행 에러

instanceof 연산자

  • 참조변수의 형변환 가능 여부 확인에 사용
  • 가능하면 true 반환
  • 형변환 전에 반드시 instanceof로 확인
void doWork(Car c){
		if (c instanceof Hyundai) { // 1. 형변환 가능한지 확인
				Hyundai h = (Hyundai)c;// 2. 형변환
Hyundai h = new Hyundai();
System.out.println(h instanceof Object); // true
System.out.println(h instanceof Car); // true
System.out.println(h instanceof Hyundai); // true

  • 자기 자신과 조상들로 형변환 가능 (instanceof true 반환)
profile
🧑🏻‍💻 Hello World!

0개의 댓글