☕ JAVA

[Java] 참조 변수의 형 변환과 instanceof

별이⭐ 2024. 5. 28. 20:51

참조 변수의 형 변환

  • 참조 변수의 형 변환? 사용할 수 있는 멤버의 갯수를 조절하는 것
    • 리모콘을 바꾸는 것! 주소값, 객체가 바뀌는 것이 아니다.
  • 조상, 자손 관계의 참조 변수는 서로 형 변환이 가능하다.
  • 멤버 갯수 감소 → 안전 (형 변환 생략 가능)
  • 멤버 갯수 증가 → 안전X (형 변환 생략 불가능)

 

예시 1

class Car {
  String color;
  int door;
  void drive() {..}
  void stop() {..}
}

class FireEngine extends Car {
  void water() {..}
}

 

예시 2

 

 

instanceof 연산자

  • 참조 변수의 형 변환 가능 여부 확인에 사용. 가능하면 true를 반환
  • 반드시 instanceof로 확인 먼저한 뒤, 형 변환 필요
void doWork(Car c) { 	// Car 또는 Car의 모든 자손들이 매개변수로 들어갈 수 있다.
	if (c instanceof FireEngine) {		// 1. 형 변환 가능 여부 확인 (c가 가리키는 객체가 FireEngine이냐?)
      FireEngine fe = (FireEngine) c;	// 2. 형 변환
      fe.water();
    } else if (c instanceof Ambulance) {
      ...
    }
}
  • instanceof가 필요한 이유
    • 만약 위 예시에서 확인을 하지 않고 (FireEngine) c;를 했는데 들어온 매개변수가 Ambulance면 형제 관계(?)끼리는 형 변환 불가능해서 에러 발생!
    • -> 에러 방지하기 위해 형 변환 필요
  • 조상들은 instanceof 결과로 true가 나온다.
    • true -> 그 타입으로 형 변환이 가능 -> 조상들로 형 변환 OK
    • Object obj = (Object) fe; 가능